# built application files
-*.apk
*.ap_
# files for the dex VM
*.iml
gen/
target/
+build/
# Local configuration files (sdk path, etc)
local.properties
build
# Actionbarsherlock is now ignored since scripts takes care of init the sub-modules.
-actionbarsherlock
\ No newline at end of file
+actionbarsherlock
-
[submodule "owncloud-android-library"]
path = owncloud-android-library
url = git://github.com/owncloud/android-library.git
+sudo: false
language: android
android:
components:
- - build-tools-22.0.1
+ - build-tools-23.0.2
+ - android-23
+ - android-22
- android-19
- - android-16
before_install:
- rm pom.xml
script:
- ./setup_env.sh ant
- - ant clean
- - ant debug
+ - ant clean -Djava.source=7 -Djava.target=7
+ - ant debug -Djava.source=7 -Djava.target=7
<?xml version="1.0" encoding="utf-8"?>
-<!--
+<!--
ownCloud Android client application
Copyright (C) 2012 Bartek Przybylski
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<manifest package="com.owncloud.android"
- android:versionCode="10700200"
- android:versionName="1.7.2" xmlns:android="http://schemas.android.com/apk/res/android">
+ android:versionCode="20151130"
+ android:versionName="20151130"
+ xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- <uses-permission android:name="android.permission.WAKE_LOCK"/>
-
- <uses-sdk
- android:minSdkVersion="14"
- android:targetSdkVersion="19" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
- </uses-permission>
+ <android:uses-permission android:name="android.permission.READ_PHONE_STATE" />
+ <android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:name=".MainApp"
android:icon="@drawable/icon"
android:label="@string/app_name"
- android:theme="@style/Theme.ownCloud">
+ android:theme="@style/Theme.ownCloud" >
<activity
android:name=".ui.activity.FileDisplayActivity"
- android:label="@string/app_name"
- >
+ android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
+
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- <activity android:name=".ui.activity.UploadFilesActivity">
- </activity>
- <activity android:name=".ui.activity.Uploader" >
+ <activity android:name=".ui.activity.UploadFilesActivity" />
+ <activity android:name=".ui.activity.LocalDirectorySelectorActivity" />
+ <activity android:name=".ui.activity.StorageMigrationActivity" />
+ <activity android:name=".ui.activity.Uploader"
+ android:label="@string/uploader_top_message"
+ android:theme="@style/Theme.ownCloud">
<intent-filter>
- <action android:name="android.intent.action.SEND" >
- </action>
+ <action android:name="android.intent.action.SEND" />
- <category android:name="android.intent.category.DEFAULT" >
- </category>
+ <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="*/*" >
- </data>
+ <data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.SEND_MULTIPLE" >
- </action>
-
- <category android:name="android.intent.category.DEFAULT" >
- </category>
+ <action android:name="android.intent.action.SEND_MULTIPLE" />
- <data android:mimeType="*/*" >
- </data>
+ <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
+ <data android:mimeType="*/*" />
+ </intent-filter>
</activity>
<activity
android:name=".ui.activity.Preferences"
android:theme="@style/Theme.ownCloud" >
</activity>
- <activity
- android:name=".ui.preview.PreviewImageActivity"
- />
-
- <activity
+ <activity
+ android:name=".ui.preview.PreviewImageActivity"
+ android:theme="@style/Theme.ownCloud.Overlay" />
+ <activity
android:name=".ui.preview.PreviewVideoActivity"
- android:label="@string/app_name"
- android:theme="@style/Theme.ownCloud.Fullscreen"
- >
- </activity>
+ android:label="@string/app_name"
+ android:theme="@style/Theme.ownCloud.Fullscreen" />
<service
android:name=".authentication.AccountAuthenticatorService"
- android:exported="true">
- <intent-filter android:priority="100">
+ android:exported="true" >
+ <intent-filter android:priority="100" >
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
</service>
<service
android:name=".syncadapter.FileSyncService"
- android:exported="true"
- >
+ android:exported="true" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
android:name=".providers.FileContentProvider"
android:authorities="@string/authority"
android:enabled="true"
- android:exported="false"
+ android:exported="true"
android:label="@string/sync_string_files"
- android:syncable="true" >
+ android:syncable="true" />
+
+ <provider
+ android:name=".providers.UsersAndGroupsSearchProvider"
+ android:authorities="com.owncloud.android.providers.UsersAndGroupsSearchProvider"
+ android:enabled="true"
+ android:exported="false"
+ android:label="@string/search_users_and_groups_hint" />
+
+ <provider
+ android:name=".ui.adapter.DiskLruImageCacheFileProvider"
+ android:authorities="@string/authorityCache"
+ android:exported="true">
</provider>
<activity
android:name=".authentication.AuthenticatorActivity"
android:exported="true"
- android:theme="@style/Theme.ownCloud.noActionBar"
- android:launchMode="singleTask">
+ android:launchMode="singleTask"
+ android:theme="@style/Theme.ownCloud.noActionBar" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
+
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
+
<data android:scheme="@string/oauth2_redirect_scheme" />
</intent-filter>
<intent-filter>
<action android:name="com.owncloud.android.workaround.accounts.CREATE" />
+
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service android:name=".files.services.FileDownloader" />
<service android:name=".files.services.FileUploader" />
<service android:name=".media.MediaService" />
-
+
<activity android:name=".ui.activity.PassCodeActivity" />
<activity android:name=".ui.activity.ConflictsResolveActivity"/>
<activity android:name=".ui.activity.GenericExplanationActivity"/>
<activity android:name=".ui.activity.ErrorsWhileCopyingHandlerActivity"/>
<activity android:name=".ui.activity.LogHistoryActivity"/>
-
+ <activity android:name=".ui.activity.ErrorReportActivity"/>
+
<receiver android:name=".files.InstantUploadBroadcastReceiver">
<intent-filter>
+
<!-- unofficially supported by many Android phones but not by HTC devices: -->
<action android:name="com.android.camera.NEW_PICTURE" />
- <!-- officially supported since Android 4.0 (SDK 14, works even for HTC devices): -->
+ <!-- officially supported since Android 4.0 (SDK 14, works even for HTC devices): -->
<action android:name="android.hardware.action.NEW_PICTURE" />
+
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.action.NEW_VIDEO" />
+
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
- <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
+ <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+ <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+ </intent-filter>
</receiver>
- <receiver android:name=".files.BootupBroadcastReceiver">
+ <receiver android:name=".files.BootupBroadcastReceiver" >
<intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED"/>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
- <service android:name=".services.observer.FileObserverService"/>
-
- <activity
- android:name=".ui.activity.CopyToClipboardActivity"
- android:label="@string/copy_link"
- android:icon="@drawable/copy_link"/>
-
- <activity
- android:name=".ui.activity.FolderPickerActivity"
- android:label="@string/app_name"/>
-
- <activity
- android:name=".ui.activity.UploadPathActivity"
- android:label="@string/app_name"/>
-
+
+ <service android:name=".services.observer.FileObserverService" />
+
+ <activity
+ android:name=".ui.activity.CopyToClipboardActivity"
+ android:icon="@drawable/copy_link"
+ android:label="@string/copy_link" />
+ <activity
+ android:name=".ui.activity.FolderPickerActivity"
+ android:label="@string/app_name" />
+ <activity
+ android:name=".ui.activity.UploadPathActivity"
+ android:label="@string/app_name" />
+ <activity
+ android:name=".ui.activity.ShareActivity"
+ android:label="@string/share_dialog_title"
+ android:theme="@style/Theme.ownCloud.Dialog"
+ android:launchMode="singleTop"
+ android:windowSoftInputMode="adjustResize" >
+ <intent-filter>
+ <action android:name="android.intent.action.SEARCH" />
+ </intent-filter>
+ <meta-data android:name="android.app.searchable"
+ android:resource="@xml/users_and_groups_searchable"/>
+ </activity>
</application>
</manifest>
-## 1.7.2 (July 2015)
-- New navigation drawer
-- Improved Passcode
-- Automatic grid view just for folders full of images
-- More characters allowed in file names
-- Support for servers in same domain, different path
-- Bugs fixed:
- + Frequent crashes in folder with several images
- + Sync error in servers with huge quota and external storage enable
- + Share by link error
- + Some other crashes and minor bugs
-
-## 1.7.1 (April 2015)
-
-- Share link even with password enforced by server
-- Get the app ready for oc 8.1 servers
-- Added option to create new folder in uploads from external apps
-- Improved management of deleted users
-- Bugs fixed
- + Fixed crash on Android 2.x devices
- + Improvements on uploads
-
-## 1.7.0 (February 2015)
-
-- Download full folders
-- Grid view for images
-- Remote thumbnails (OC Server 8.0+)
-- Added number of files and folders at the end of the list
-- "Open with" in contextual menu
-- Downloads added to Media Provider
-- Uploads:
- + Local thumbnails in section "Files"
- + Multiple selection in "Content from other apps" (Android 4.3+)
-- Gallery:
- + proper handling of EXIF
- + obey sorting in the list of files
-- Settings view updated
-- Improved subjects in e-mails
-- Bugs fixed
+# 2015-11-28
+- update all PR
+- PR [#1191] (https://github.com/owncloud/android/pull/1191) "Cancel upload on wlan exit" merged
+- PR [#1220] (https://github.com/owncloud/android/pull/1220) "Move to compile target Marshmallow (Android 6 - v23)" merged
+# 2015-11-21
+- fix #1297
+- update all PR
+- try for #1278
+# 2015-11-20
+- PR [#1293] (https://github.com/owncloud/android/pull/1293) "External SD by przybylski" merged
+- PR [#1296] (https://github.com/owncloud/android/pull/1296) "Don't allow to remove passcode without entering it. Don't allow to set incomplete passcode by przybylski" merged
+
+# 2015-11-18
+- update all PR
+- fix #1259
+
+# 2015-11-13
+- update all PR
+
+# 2015-11-10
+- update master
+- PR [#1277] (https://github.com/owncloud/android/pull/1277) "Optimized uploader layout and user configured sorting" merged
+
+# 2015-11-05
+- update master
+- fix #1244
+- add changelog
+- add check for update of beta version
+
+# 2015-11-02
+- PR [#1240](https://github.com/owncloud/android/pull/1240) "Set as wallpaper" merged
+- updated other PRs
+
+# 2015-11-01
+- PR [#1236](https://github.com/owncloud/android/pull/1236) "Streaming video/audio" merged
+- PR [#1035](https://github.com/owncloud/android/pull/1035) "Enable video thumbnail" merged
+
+# 2015-10-31
+- updated all PR
+- bugfix: #1234, #1230
+- implement Crash Handler
+- implement direct download of latest apk in settings -> last item on bottom
+
+# 2015-10-30
+- fixed problem with Authority
+
+# 2015-10-29
+- PR [#1099](https://github.com/owncloud/android/pull/1099) "Switch list vs grid" merged
+- PR [#1100](https://github.com/owncloud/android/pull/1100) "Material FAB with speed dial implementation" merged
+- PR [#1209](https://github.com/owncloud/android/pull/1209) "Material buttons - before in #1090" merged
+- PR [#1205](https://github.com/owncloud/android/pull/1205) "Switch between online and offline files" merged
+- PR [#1195](https://github.com/owncloud/android/pull/1195) "Resize Cache" merged
+- PR [#1187](https://github.com/owncloud/android/pull/1187) "Video: Big thumbnails" merged
+- PR [#1058](https://github.com/owncloud/android/pull/1058) "add sort to UploadFileActiviy" merged
+- PR [#1168](https://github.com/owncloud/android/pull/1168) "Avoid duplicate files" merged
+- PR [#1176](https://github.com/owncloud/android/pull/1176) "Multi select" merged
+
+
+# 2015-10-26
+- start of branch
+- PR [#745](https://github.com/owncloud/android/pull/745) merged
+- PR [#1044](https://github.com/owncloud/android/pull/1044) merged: < 8.1: GalleryPlus app needed, >= 8.2 Gallery app needed
+- PR [#1111](https://github.com/owncloud/android/pull/1111) merged
\ No newline at end of file
-#This is the Android client for [ownCloud][0]
+#This is the BETA Android client for [ownCloud][0]
+
+The BETA app is only intended to be used by experienced users that want to use and test the latest features.
+All pull requests labeled "3 - to review" or higher will be included into the branch.
+
+If you find a bug please verify first if it is *really* a bug in beta, then comment in the corresponding pull request or create a new issue with the prefix "Beta YYYY-MM-DD:".
+
+The compiled APKs can be found [here][2]
+
+The changelog is found [here][3]
The app performs file synchronization with an ownCloud server. Other ownCloud features may be added in the future, but they are not a priority right now.
## Build Status on
-Git master: 
-
-Git stable: 
+Git beta: 
## Development
[0]: https://github.com/owncloud/core
[1]: https://github.com/owncloud/android/blob/master/SETUP.md
+[2]: https://github.com/owncloud/android/tree/beta/apks/
+[3]: https://github.com/owncloud/android/blob/beta/CHANGELOG.md
### Contributing
Please see [Contribution Guidelines](https://owncloud.org/contribute/). Fork this repository and contribute back using
* Android SDK Tools and Android SDK Platform-tools (already installed); upgrade to their last versions is usually a good idea.
* Android SDK Build-Tools; any version from 20 or later should work fine; avoid preview versions, if any available.
-* Android 4.4.2 (API 19), SDK Platform; needed to build the ownCloud app.
-* Android 4.1.2 (API 16), SDK Platform; needed to build the Android Support Library (not neeeded if working with Android Studio or gradle).
+* Android 4.4.2 (API 19), SDK Platform; needed for build/test ownCloud app.
+* Android 5.1.1 (API 22), SDK Platform; needed to build the Android Support Library (not neeeded if working with Android Studio or gradle) and build the owncloud app.
Install any other package you consider interesting, such as emulators.
* Open a terminal and go on with the next steps in it.
* Clone your forked repository: ```git clone git@github.com:YOURGITHUBNAME/android.git```.
* Move to the project folder with ```cd android```.
-* Checkout the remote branch 'master' in your own local branch 'master': ```git checkout -b master remotes/origin/master```.
+* Checkout the remote branch 'master' in your own local branch 'master': ```git checkout master remotes/origin/master```.
* Pull any changes from your remote branch 'master': ```git pull origin master```
* Make official ownCloud repo known as upstream: ```git remote add upstream git@github.com:owncloud/android.git```
* Make sure to get the latest changes from official android/master branch: ```git pull upstream master```
* Choose the projects with the next names under the 'New Project Name' column:
** owncloud-android
** android-support-appcompat-v7-exploded-aar
+** com-getbase-floatingactionbutton-1-10-0-exploded-aar
** owncloud-android-workaround-accounts (optional)
** ownCloud Android Library
** ownCloud Sample Client (optional)
* If any error persists, clean and build manually the next projects in order:
** ownCloud Android Library
** android-support-appcompat-v7-exploded-aar
+** com-getbase-floatingactionbutton-1-10-0-exploded-aar
** owncloud-android
* If any error on those projects persists, check the project properties. In the 'Android' section, API Level should be
** ownCloud Android Library -> API level 19
-** android-support-appcompat-v7-exploded-aa -> API level 16
-** owncloud-android -> API level 19 ; in this project, two library projects should appear referred in the bottom of the dialog: libs\android-support-appcompat-v7-exploded-aar and owncloud-android-library. Add them if needed.
+** android-support-appcompat-v7-exploded-aa -> API level 22
+** owncloud-android -> API level 22 ; in this project, three library projects should appear referred in the bottom of the dialog: libs\android-support-appcompat-v7-exploded-aar, ** com-getbase-floatingactionbutton-1-10-0-exploded-aar and owncloud-android-library. Add them if needed.
* After those actions you should be good to go. HAVE FUN!
* cd ..
* git clone https://github.com/mosabua/maven-android-sdk-deployer.git
* cd maven-android-sdk-deployer
-* mvn -pl com.simpligility.android.sdk-deployer:android-19 -am install
+* mvn -pl com.simpligility.android.sdk-deployer:android-22 -am install
* cd ../android/owncloud-android-library
* mvn install
* cd ..
modifications com.ortiz.touch.ExtendedViewPager and com.ortiz.touch.TouchImageView classes.
See https://github.com/MikeOrtiz/TouchImageView
-
\ No newline at end of file
+ * floatingactionbutton 1.10.1.
+ Copyright (c) 2014 Jerzy Chalupski
+ Licensed under Apache License, Version 2.0.
+ placed at libs/com-getbase-floatingactionbutton-1-10-0-exploded-aar has been exploded by ownCloud Inc.
+ See https://github.com/futuresimple/android-floating-action-button
\ No newline at end of file
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.2.3'
+ classpath 'com.android.tools.build:gradle:1.5.0'
}
}
dependencies {
compile name: 'touch-image-view'
- compile 'com.android.support:support-v4:19.1.0'
compile project(':owncloud-android-library')
+ compile 'com.android.support:support-v4:23.1.1'
compile 'com.jakewharton:disklrucache:2.0.2'
- compile 'com.android.support:appcompat-v7:19.1.0'
+ compile 'com.android.support:appcompat-v7:23.1.1'
+ compile 'com.getbase:floatingactionbutton:1.10.1'
}
android {
- compileSdkVersion 19
- buildToolsVersion "22.0.1"
+ compileSdkVersion 23
+ buildToolsVersion "23.0.2"
+ // as long as ownCloud uses Apache HTTP
+ // http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client
+ useLibrary 'org.apache.http.legacy'
+
+ defaultConfig {
+ applicationId "com.owncloud.android.beta"
+ versionCode 20151130
+ versionName "20151130"
+ }
+
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
}
}
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
- }
-
productFlavors {
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
-}
+ signingConfigs {
+ release {
+ storeFile file(RELEASE_STORE_FILE)
+ storePassword RELEASE_STORE_PASSWORD
+ keyAlias RELEASE_KEY_ALIAS
+ keyPassword RELEASE_KEY_PASSWORD
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ }
+ }
+}
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
- <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
- <classpathentry kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>android-support-appcompat-v7-exploded-aar</name>
+ <name>android-support-v7-appcompat</name>
<comment></comment>
<projects>
</projects>
<uses-sdk android:minSdkVersion="7"/>
<application />
</manifest>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/AndroidManifest.xml -->
\ No newline at end of file
int anim abc_fade_in 0x7f040000
int anim abc_fade_out 0x7f040001
-int anim abc_slide_in_bottom 0x7f040002
-int anim abc_slide_in_top 0x7f040003
-int anim abc_slide_out_bottom 0x7f040004
-int anim abc_slide_out_top 0x7f040005
-int attr actionBarDivider 0x7f010000
-int attr actionBarItemBackground 0x7f010001
-int attr actionBarSize 0x7f010002
-int attr actionBarSplitStyle 0x7f010003
-int attr actionBarStyle 0x7f010004
-int attr actionBarTabBarStyle 0x7f010005
-int attr actionBarTabStyle 0x7f010006
-int attr actionBarTabTextStyle 0x7f010007
-int attr actionBarWidgetTheme 0x7f010008
-int attr actionButtonStyle 0x7f010009
-int attr actionDropDownStyle 0x7f010066
-int attr actionLayout 0x7f01005d
-int attr actionMenuTextAppearance 0x7f01000a
-int attr actionMenuTextColor 0x7f01000b
-int attr actionModeBackground 0x7f01000c
-int attr actionModeCloseButtonStyle 0x7f01000d
-int attr actionModeCloseDrawable 0x7f01000e
-int attr actionModeCopyDrawable 0x7f01000f
-int attr actionModeCutDrawable 0x7f010010
-int attr actionModeFindDrawable 0x7f010011
-int attr actionModePasteDrawable 0x7f010012
-int attr actionModePopupWindowStyle 0x7f010013
-int attr actionModeSelectAllDrawable 0x7f010014
-int attr actionModeShareDrawable 0x7f010015
-int attr actionModeSplitBackground 0x7f010016
-int attr actionModeStyle 0x7f010017
-int attr actionModeWebSearchDrawable 0x7f010018
-int attr actionOverflowButtonStyle 0x7f010019
-int attr actionProviderClass 0x7f01005f
-int attr actionViewClass 0x7f01005e
-int attr activityChooserViewStyle 0x7f01001a
-int attr background 0x7f010047
-int attr backgroundSplit 0x7f010049
-int attr backgroundStacked 0x7f010048
-int attr buttonBarButtonStyle 0x7f01001b
-int attr buttonBarStyle 0x7f01001c
-int attr customNavigationLayout 0x7f01004a
-int attr disableChildrenWhenDisabled 0x7f010065
-int attr displayOptions 0x7f010040
-int attr divider 0x7f010046
-int attr dividerHorizontal 0x7f01001d
-int attr dividerPadding 0x7f01005b
-int attr dividerVertical 0x7f01001e
-int attr dropDownListViewStyle 0x7f01001f
-int attr dropdownListPreferredItemHeight 0x7f010067
-int attr expandActivityOverflowButtonDrawable 0x7f010058
-int attr height 0x7f010020
-int attr homeAsUpIndicator 0x7f010021
-int attr homeLayout 0x7f01004b
-int attr icon 0x7f010044
-int attr iconifiedByDefault 0x7f010060
-int attr indeterminateProgressStyle 0x7f01004d
-int attr initialActivityCount 0x7f010057
-int attr isLightTheme 0x7f010022
-int attr itemPadding 0x7f01004f
-int attr listChoiceBackgroundIndicator 0x7f01006b
-int attr listPopupWindowStyle 0x7f010023
-int attr listPreferredItemHeight 0x7f010024
-int attr listPreferredItemHeightLarge 0x7f010025
-int attr listPreferredItemHeightSmall 0x7f010026
-int attr listPreferredItemPaddingLeft 0x7f010027
-int attr listPreferredItemPaddingRight 0x7f010028
-int attr logo 0x7f010045
-int attr navigationMode 0x7f01003f
-int attr paddingEnd 0x7f01006d
-int attr paddingStart 0x7f01006c
-int attr panelMenuListTheme 0x7f01006a
-int attr panelMenuListWidth 0x7f010069
-int attr popupMenuStyle 0x7f010068
-int attr popupPromptView 0x7f010064
-int attr progressBarPadding 0x7f01004e
-int attr progressBarStyle 0x7f01004c
-int attr prompt 0x7f010062
-int attr queryHint 0x7f010061
-int attr searchDropdownBackground 0x7f010029
-int attr searchResultListItemHeight 0x7f01002a
-int attr searchViewAutoCompleteTextView 0x7f01002b
-int attr searchViewCloseIcon 0x7f01002c
-int attr searchViewEditQuery 0x7f01002d
-int attr searchViewEditQueryBackground 0x7f01002e
-int attr searchViewGoIcon 0x7f01002f
-int attr searchViewSearchIcon 0x7f010030
-int attr searchViewTextField 0x7f010031
-int attr searchViewTextFieldRight 0x7f010032
-int attr searchViewVoiceIcon 0x7f010033
-int attr selectableItemBackground 0x7f010034
-int attr showAsAction 0x7f01005c
-int attr showDividers 0x7f01005a
-int attr spinnerDropDownItemStyle 0x7f010035
-int attr spinnerMode 0x7f010063
-int attr spinnerStyle 0x7f010036
-int attr subtitle 0x7f010041
-int attr subtitleTextStyle 0x7f010043
-int attr textAllCaps 0x7f010059
-int attr textAppearanceLargePopupMenu 0x7f010037
-int attr textAppearanceListItem 0x7f010038
-int attr textAppearanceListItemSmall 0x7f010039
-int attr textAppearanceSearchResultSubtitle 0x7f01003a
-int attr textAppearanceSearchResultTitle 0x7f01003b
-int attr textAppearanceSmallPopupMenu 0x7f01003c
-int attr textColorSearchUrl 0x7f01003d
-int attr title 0x7f01003e
-int attr titleTextStyle 0x7f010042
-int attr windowActionBar 0x7f010050
-int attr windowActionBarOverlay 0x7f010051
-int attr windowFixedHeightMajor 0x7f010056
-int attr windowFixedHeightMinor 0x7f010054
-int attr windowFixedWidthMajor 0x7f010053
-int attr windowFixedWidthMinor 0x7f010055
-int attr windowSplitActionBar 0x7f010052
-int bool abc_action_bar_embed_tabs_pre_jb 0x7f050000
-int bool abc_action_bar_expanded_action_views_exclusive 0x7f050001
-int bool abc_config_actionMenuItemAllCaps 0x7f050002
-int bool abc_config_allowActionMenuItemTextWithIcon 0x7f050003
-int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f050004
-int bool abc_split_action_bar_is_narrow 0x7f050005
-int color abc_search_url_text_holo 0x7f060003
-int color abc_search_url_text_normal 0x7f060000
-int color abc_search_url_text_pressed 0x7f060001
-int color abc_search_url_text_selected 0x7f060002
-int dimen abc_action_bar_default_height 0x7f080000
-int dimen abc_action_bar_icon_vertical_padding 0x7f080001
-int dimen abc_action_bar_progress_bar_size 0x7f080002
-int dimen abc_action_bar_stacked_max_height 0x7f080003
-int dimen abc_action_bar_stacked_tab_max_width 0x7f080004
-int dimen abc_action_bar_subtitle_bottom_margin 0x7f080005
-int dimen abc_action_bar_subtitle_text_size 0x7f080006
-int dimen abc_action_bar_subtitle_top_margin 0x7f080007
-int dimen abc_action_bar_title_text_size 0x7f080008
-int dimen abc_action_button_min_width 0x7f080009
-int dimen abc_config_prefDialogWidth 0x7f08000a
-int dimen abc_dropdownitem_icon_width 0x7f08000b
-int dimen abc_dropdownitem_text_padding_left 0x7f08000c
-int dimen abc_dropdownitem_text_padding_right 0x7f08000d
-int dimen abc_panel_menu_list_width 0x7f08000e
-int dimen abc_search_view_preferred_width 0x7f08000f
-int dimen abc_search_view_text_min_width 0x7f080010
-int dimen dialog_fixed_height_major 0x7f080011
-int dimen dialog_fixed_height_minor 0x7f080012
-int dimen dialog_fixed_width_major 0x7f080013
-int dimen dialog_fixed_width_minor 0x7f080014
-int drawable abc_ab_bottom_solid_dark_holo 0x7f020000
-int drawable abc_ab_bottom_solid_light_holo 0x7f020001
-int drawable abc_ab_bottom_transparent_dark_holo 0x7f020002
-int drawable abc_ab_bottom_transparent_light_holo 0x7f020003
-int drawable abc_ab_share_pack_holo_dark 0x7f020004
-int drawable abc_ab_share_pack_holo_light 0x7f020005
-int drawable abc_ab_solid_dark_holo 0x7f020006
-int drawable abc_ab_solid_light_holo 0x7f020007
-int drawable abc_ab_stacked_solid_dark_holo 0x7f020008
-int drawable abc_ab_stacked_solid_light_holo 0x7f020009
-int drawable abc_ab_stacked_transparent_dark_holo 0x7f02000a
-int drawable abc_ab_stacked_transparent_light_holo 0x7f02000b
-int drawable abc_ab_transparent_dark_holo 0x7f02000c
-int drawable abc_ab_transparent_light_holo 0x7f02000d
-int drawable abc_cab_background_bottom_holo_dark 0x7f02000e
-int drawable abc_cab_background_bottom_holo_light 0x7f02000f
-int drawable abc_cab_background_top_holo_dark 0x7f020010
-int drawable abc_cab_background_top_holo_light 0x7f020011
-int drawable abc_ic_ab_back_holo_dark 0x7f020012
-int drawable abc_ic_ab_back_holo_light 0x7f020013
-int drawable abc_ic_cab_done_holo_dark 0x7f020014
-int drawable abc_ic_cab_done_holo_light 0x7f020015
-int drawable abc_ic_clear 0x7f020016
-int drawable abc_ic_clear_disabled 0x7f020017
-int drawable abc_ic_clear_holo_light 0x7f020018
-int drawable abc_ic_clear_normal 0x7f020019
-int drawable abc_ic_clear_search_api_disabled_holo_light 0x7f02001a
-int drawable abc_ic_clear_search_api_holo_light 0x7f02001b
-int drawable abc_ic_commit_search_api_holo_dark 0x7f02001c
-int drawable abc_ic_commit_search_api_holo_light 0x7f02001d
-int drawable abc_ic_go 0x7f02001e
-int drawable abc_ic_go_search_api_holo_light 0x7f02001f
-int drawable abc_ic_menu_moreoverflow_normal_holo_dark 0x7f020020
-int drawable abc_ic_menu_moreoverflow_normal_holo_light 0x7f020021
-int drawable abc_ic_menu_share_holo_dark 0x7f020022
-int drawable abc_ic_menu_share_holo_light 0x7f020023
-int drawable abc_ic_search 0x7f020024
-int drawable abc_ic_search_api_holo_light 0x7f020025
-int drawable abc_ic_voice_search 0x7f020026
-int drawable abc_ic_voice_search_api_holo_light 0x7f020027
-int drawable abc_item_background_holo_dark 0x7f020028
-int drawable abc_item_background_holo_light 0x7f020029
-int drawable abc_list_divider_holo_dark 0x7f02002a
-int drawable abc_list_divider_holo_light 0x7f02002b
-int drawable abc_list_focused_holo 0x7f02002c
-int drawable abc_list_longpressed_holo 0x7f02002d
-int drawable abc_list_pressed_holo_dark 0x7f02002e
-int drawable abc_list_pressed_holo_light 0x7f02002f
-int drawable abc_list_selector_background_transition_holo_dark 0x7f020030
-int drawable abc_list_selector_background_transition_holo_light 0x7f020031
-int drawable abc_list_selector_disabled_holo_dark 0x7f020032
-int drawable abc_list_selector_disabled_holo_light 0x7f020033
-int drawable abc_list_selector_holo_dark 0x7f020034
-int drawable abc_list_selector_holo_light 0x7f020035
-int drawable abc_menu_dropdown_panel_holo_dark 0x7f020036
-int drawable abc_menu_dropdown_panel_holo_light 0x7f020037
-int drawable abc_menu_hardkey_panel_holo_dark 0x7f020038
-int drawable abc_menu_hardkey_panel_holo_light 0x7f020039
-int drawable abc_search_dropdown_dark 0x7f02003a
-int drawable abc_search_dropdown_light 0x7f02003b
-int drawable abc_spinner_ab_default_holo_dark 0x7f02003c
-int drawable abc_spinner_ab_default_holo_light 0x7f02003d
-int drawable abc_spinner_ab_disabled_holo_dark 0x7f02003e
-int drawable abc_spinner_ab_disabled_holo_light 0x7f02003f
-int drawable abc_spinner_ab_focused_holo_dark 0x7f020040
-int drawable abc_spinner_ab_focused_holo_light 0x7f020041
-int drawable abc_spinner_ab_holo_dark 0x7f020042
-int drawable abc_spinner_ab_holo_light 0x7f020043
-int drawable abc_spinner_ab_pressed_holo_dark 0x7f020044
-int drawable abc_spinner_ab_pressed_holo_light 0x7f020045
-int drawable abc_tab_indicator_ab_holo 0x7f020046
-int drawable abc_tab_selected_focused_holo 0x7f020047
-int drawable abc_tab_selected_holo 0x7f020048
-int drawable abc_tab_selected_pressed_holo 0x7f020049
-int drawable abc_tab_unselected_pressed_holo 0x7f02004a
-int drawable abc_textfield_search_default_holo_dark 0x7f02004b
-int drawable abc_textfield_search_default_holo_light 0x7f02004c
-int drawable abc_textfield_search_right_default_holo_dark 0x7f02004d
-int drawable abc_textfield_search_right_default_holo_light 0x7f02004e
-int drawable abc_textfield_search_right_selected_holo_dark 0x7f02004f
-int drawable abc_textfield_search_right_selected_holo_light 0x7f020050
-int drawable abc_textfield_search_selected_holo_dark 0x7f020051
-int drawable abc_textfield_search_selected_holo_light 0x7f020052
-int drawable abc_textfield_searchview_holo_dark 0x7f020053
-int drawable abc_textfield_searchview_holo_light 0x7f020054
-int drawable abc_textfield_searchview_right_holo_dark 0x7f020055
-int drawable abc_textfield_searchview_right_holo_light 0x7f020056
-int id action_bar 0x7f07001c
-int id action_bar_activity_content 0x7f070014
-int id action_bar_container 0x7f07001b
-int id action_bar_overlay_layout 0x7f07001f
-int id action_bar_root 0x7f07001a
-int id action_bar_subtitle 0x7f070023
-int id action_bar_title 0x7f070022
-int id action_context_bar 0x7f07001d
-int id action_menu_divider 0x7f070015
-int id action_menu_presenter 0x7f070016
-int id action_mode_close_button 0x7f070024
-int id activity_chooser_view_content 0x7f070025
-int id always 0x7f07000f
-int id beginning 0x7f07000a
-int id checkbox 0x7f07002d
-int id collapseActionView 0x7f070011
-int id default_activity_button 0x7f070028
-int id dialog 0x7f070012
-int id disableHome 0x7f070008
-int id dropdown 0x7f070013
-int id edit_query 0x7f070030
-int id end 0x7f07000c
-int id expand_activities_button 0x7f070026
-int id expanded_menu 0x7f07002c
-int id home 0x7f070017
-int id homeAsUp 0x7f070005
-int id icon 0x7f07002a
-int id ifRoom 0x7f07000e
-int id image 0x7f070027
-int id listMode 0x7f070001
-int id list_item 0x7f070029
-int id middle 0x7f07000b
-int id never 0x7f07000d
-int id none 0x7f070009
-int id normal 0x7f070000
-int id progress_circular 0x7f070018
-int id progress_horizontal 0x7f070019
-int id radio 0x7f07002f
-int id search_badge 0x7f070032
-int id search_bar 0x7f070031
-int id search_button 0x7f070033
-int id search_close_btn 0x7f070038
-int id search_edit_frame 0x7f070034
-int id search_go_btn 0x7f07003a
-int id search_mag_icon 0x7f070035
-int id search_plate 0x7f070036
-int id search_src_text 0x7f070037
-int id search_voice_btn 0x7f07003b
-int id shortcut 0x7f07002e
-int id showCustom 0x7f070007
-int id showHome 0x7f070004
-int id showTitle 0x7f070006
-int id split_action_bar 0x7f07001e
-int id submit_area 0x7f070039
-int id tabMode 0x7f070002
-int id title 0x7f07002b
-int id top_action_bar 0x7f070020
-int id up 0x7f070021
-int id useLogo 0x7f070003
-int id withText 0x7f070010
+int anim abc_grow_fade_in_from_bottom 0x7f040002
+int anim abc_popup_enter 0x7f040003
+int anim abc_popup_exit 0x7f040004
+int anim abc_shrink_fade_out_from_bottom 0x7f040005
+int anim abc_slide_in_bottom 0x7f040006
+int anim abc_slide_in_top 0x7f040007
+int anim abc_slide_out_bottom 0x7f040008
+int anim abc_slide_out_top 0x7f040009
+int attr actionBarDivider 0x7f010063
+int attr actionBarItemBackground 0x7f010064
+int attr actionBarPopupTheme 0x7f01005d
+int attr actionBarSize 0x7f010062
+int attr actionBarSplitStyle 0x7f01005f
+int attr actionBarStyle 0x7f01005e
+int attr actionBarTabBarStyle 0x7f010059
+int attr actionBarTabStyle 0x7f010058
+int attr actionBarTabTextStyle 0x7f01005a
+int attr actionBarTheme 0x7f010060
+int attr actionBarWidgetTheme 0x7f010061
+int attr actionButtonStyle 0x7f01007d
+int attr actionDropDownStyle 0x7f010079
+int attr actionLayout 0x7f010034
+int attr actionMenuTextAppearance 0x7f010065
+int attr actionMenuTextColor 0x7f010066
+int attr actionModeBackground 0x7f010069
+int attr actionModeCloseButtonStyle 0x7f010068
+int attr actionModeCloseDrawable 0x7f01006b
+int attr actionModeCopyDrawable 0x7f01006d
+int attr actionModeCutDrawable 0x7f01006c
+int attr actionModeFindDrawable 0x7f010071
+int attr actionModePasteDrawable 0x7f01006e
+int attr actionModePopupWindowStyle 0x7f010073
+int attr actionModeSelectAllDrawable 0x7f01006f
+int attr actionModeShareDrawable 0x7f010070
+int attr actionModeSplitBackground 0x7f01006a
+int attr actionModeStyle 0x7f010067
+int attr actionModeWebSearchDrawable 0x7f010072
+int attr actionOverflowButtonStyle 0x7f01005b
+int attr actionOverflowMenuStyle 0x7f01005c
+int attr actionProviderClass 0x7f010036
+int attr actionViewClass 0x7f010035
+int attr activityChooserViewStyle 0x7f010085
+int attr alertDialogButtonGroupStyle 0x7f0100a8
+int attr alertDialogCenterButtons 0x7f0100a9
+int attr alertDialogStyle 0x7f0100a7
+int attr alertDialogTheme 0x7f0100aa
+int attr allowStacking 0x7f010025
+int attr arrowHeadLength 0x7f01002c
+int attr arrowShaftLength 0x7f01002d
+int attr autoCompleteTextViewStyle 0x7f0100af
+int attr background 0x7f01000c
+int attr backgroundSplit 0x7f01000e
+int attr backgroundStacked 0x7f01000d
+int attr backgroundTint 0x7f0100cc
+int attr backgroundTintMode 0x7f0100cd
+int attr barLength 0x7f01002e
+int attr borderlessButtonStyle 0x7f010082
+int attr buttonBarButtonStyle 0x7f01007f
+int attr buttonBarNegativeButtonStyle 0x7f0100ad
+int attr buttonBarNeutralButtonStyle 0x7f0100ae
+int attr buttonBarPositiveButtonStyle 0x7f0100ac
+int attr buttonBarStyle 0x7f01007e
+int attr buttonPanelSideLayout 0x7f01001f
+int attr buttonStyle 0x7f0100b0
+int attr buttonStyleSmall 0x7f0100b1
+int attr buttonTint 0x7f010026
+int attr buttonTintMode 0x7f010027
+int attr checkboxStyle 0x7f0100b2
+int attr checkedTextViewStyle 0x7f0100b3
+int attr closeIcon 0x7f01003e
+int attr closeItemLayout 0x7f01001c
+int attr collapseContentDescription 0x7f0100c3
+int attr collapseIcon 0x7f0100c2
+int attr color 0x7f010028
+int attr colorAccent 0x7f0100a0
+int attr colorButtonNormal 0x7f0100a4
+int attr colorControlActivated 0x7f0100a2
+int attr colorControlHighlight 0x7f0100a3
+int attr colorControlNormal 0x7f0100a1
+int attr colorPrimary 0x7f01009e
+int attr colorPrimaryDark 0x7f01009f
+int attr colorSwitchThumbNormal 0x7f0100a5
+int attr commitIcon 0x7f010043
+int attr contentInsetEnd 0x7f010017
+int attr contentInsetLeft 0x7f010018
+int attr contentInsetRight 0x7f010019
+int attr contentInsetStart 0x7f010016
+int attr controlBackground 0x7f0100a6
+int attr customNavigationLayout 0x7f01000f
+int attr defaultQueryHint 0x7f01003d
+int attr dialogPreferredPadding 0x7f010077
+int attr dialogTheme 0x7f010076
+int attr displayOptions 0x7f010005
+int attr divider 0x7f01000b
+int attr dividerHorizontal 0x7f010084
+int attr dividerPadding 0x7f010032
+int attr dividerVertical 0x7f010083
+int attr drawableSize 0x7f01002a
+int attr drawerArrowStyle 0x7f010000
+int attr dropDownListViewStyle 0x7f010096
+int attr dropdownListPreferredItemHeight 0x7f01007a
+int attr editTextBackground 0x7f01008b
+int attr editTextColor 0x7f01008a
+int attr editTextStyle 0x7f0100b4
+int attr elevation 0x7f01001a
+int attr expandActivityOverflowButtonDrawable 0x7f01001e
+int attr gapBetweenBars 0x7f01002b
+int attr goIcon 0x7f01003f
+int attr height 0x7f010001
+int attr hideOnContentScroll 0x7f010015
+int attr homeAsUpIndicator 0x7f01007c
+int attr homeLayout 0x7f010010
+int attr icon 0x7f010009
+int attr iconifiedByDefault 0x7f01003b
+int attr imageButtonStyle 0x7f01008c
+int attr indeterminateProgressStyle 0x7f010012
+int attr initialActivityCount 0x7f01001d
+int attr isLightTheme 0x7f010002
+int attr itemPadding 0x7f010014
+int attr layout 0x7f01003a
+int attr listChoiceBackgroundIndicator 0x7f01009d
+int attr listDividerAlertDialog 0x7f010078
+int attr listItemLayout 0x7f010023
+int attr listLayout 0x7f010020
+int attr listPopupWindowStyle 0x7f010097
+int attr listPreferredItemHeight 0x7f010091
+int attr listPreferredItemHeightLarge 0x7f010093
+int attr listPreferredItemHeightSmall 0x7f010092
+int attr listPreferredItemPaddingLeft 0x7f010094
+int attr listPreferredItemPaddingRight 0x7f010095
+int attr logo 0x7f01000a
+int attr logoDescription 0x7f0100c6
+int attr maxButtonHeight 0x7f0100c1
+int attr measureWithLargestChild 0x7f010030
+int attr multiChoiceItemLayout 0x7f010021
+int attr navigationContentDescription 0x7f0100c5
+int attr navigationIcon 0x7f0100c4
+int attr navigationMode 0x7f010004
+int attr overlapAnchor 0x7f010038
+int attr paddingEnd 0x7f0100ca
+int attr paddingStart 0x7f0100c9
+int attr panelBackground 0x7f01009a
+int attr panelMenuListTheme 0x7f01009c
+int attr panelMenuListWidth 0x7f01009b
+int attr popupMenuStyle 0x7f010088
+int attr popupTheme 0x7f01001b
+int attr popupWindowStyle 0x7f010089
+int attr preserveIconSpacing 0x7f010037
+int attr progressBarPadding 0x7f010013
+int attr progressBarStyle 0x7f010011
+int attr queryBackground 0x7f010045
+int attr queryHint 0x7f01003c
+int attr radioButtonStyle 0x7f0100b5
+int attr ratingBarStyle 0x7f0100b6
+int attr searchHintIcon 0x7f010041
+int attr searchIcon 0x7f010040
+int attr searchViewStyle 0x7f010090
+int attr seekBarStyle 0x7f0100b7
+int attr selectableItemBackground 0x7f010080
+int attr selectableItemBackgroundBorderless 0x7f010081
+int attr showAsAction 0x7f010033
+int attr showDividers 0x7f010031
+int attr showText 0x7f01004d
+int attr singleChoiceItemLayout 0x7f010022
+int attr spinBars 0x7f010029
+int attr spinnerDropDownItemStyle 0x7f01007b
+int attr spinnerStyle 0x7f0100b8
+int attr splitTrack 0x7f01004c
+int attr state_above_anchor 0x7f010039
+int attr submitBackground 0x7f010046
+int attr subtitle 0x7f010006
+int attr subtitleTextAppearance 0x7f0100bb
+int attr subtitleTextColor 0x7f0100c8
+int attr subtitleTextStyle 0x7f010008
+int attr suggestionRowLayout 0x7f010044
+int attr switchMinWidth 0x7f01004a
+int attr switchPadding 0x7f01004b
+int attr switchStyle 0x7f0100b9
+int attr switchTextAppearance 0x7f010049
+int attr textAllCaps 0x7f010024
+int attr textAppearanceLargePopupMenu 0x7f010074
+int attr textAppearanceListItem 0x7f010098
+int attr textAppearanceListItemSmall 0x7f010099
+int attr textAppearanceSearchResultSubtitle 0x7f01008e
+int attr textAppearanceSearchResultTitle 0x7f01008d
+int attr textAppearanceSmallPopupMenu 0x7f010075
+int attr textColorAlertDialogListItem 0x7f0100ab
+int attr textColorSearchUrl 0x7f01008f
+int attr theme 0x7f0100cb
+int attr thickness 0x7f01002f
+int attr thumbTextPadding 0x7f010048
+int attr title 0x7f010003
+int attr titleMarginBottom 0x7f0100c0
+int attr titleMarginEnd 0x7f0100be
+int attr titleMarginStart 0x7f0100bd
+int attr titleMarginTop 0x7f0100bf
+int attr titleMargins 0x7f0100bc
+int attr titleTextAppearance 0x7f0100ba
+int attr titleTextColor 0x7f0100c7
+int attr titleTextStyle 0x7f010007
+int attr toolbarNavigationButtonStyle 0x7f010087
+int attr toolbarStyle 0x7f010086
+int attr track 0x7f010047
+int attr voiceIcon 0x7f010042
+int attr windowActionBar 0x7f01004e
+int attr windowActionBarOverlay 0x7f010050
+int attr windowActionModeOverlay 0x7f010051
+int attr windowFixedHeightMajor 0x7f010055
+int attr windowFixedHeightMinor 0x7f010053
+int attr windowFixedWidthMajor 0x7f010052
+int attr windowFixedWidthMinor 0x7f010054
+int attr windowMinWidthMajor 0x7f010056
+int attr windowMinWidthMinor 0x7f010057
+int attr windowNoTitle 0x7f01004f
+int bool abc_action_bar_embed_tabs 0x7f060003
+int bool abc_action_bar_embed_tabs_pre_jb 0x7f060001
+int bool abc_action_bar_expanded_action_views_exclusive 0x7f060004
+int bool abc_allow_stacked_button_bar 0x7f060000
+int bool abc_config_actionMenuItemAllCaps 0x7f060005
+int bool abc_config_allowActionMenuItemTextWithIcon 0x7f060002
+int bool abc_config_closeDialogWhenTouchOutside 0x7f060006
+int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f060007
+int color abc_background_cache_hint_selector_material_dark 0x7f0a003a
+int color abc_background_cache_hint_selector_material_light 0x7f0a003b
+int color abc_color_highlight_material 0x7f0a003c
+int color abc_input_method_navigation_guard 0x7f0a0000
+int color abc_primary_text_disable_only_material_dark 0x7f0a003d
+int color abc_primary_text_disable_only_material_light 0x7f0a003e
+int color abc_primary_text_material_dark 0x7f0a003f
+int color abc_primary_text_material_light 0x7f0a0040
+int color abc_search_url_text 0x7f0a0041
+int color abc_search_url_text_normal 0x7f0a0001
+int color abc_search_url_text_pressed 0x7f0a0002
+int color abc_search_url_text_selected 0x7f0a0003
+int color abc_secondary_text_material_dark 0x7f0a0042
+int color abc_secondary_text_material_light 0x7f0a0043
+int color accent_material_dark 0x7f0a0004
+int color accent_material_light 0x7f0a0005
+int color background_floating_material_dark 0x7f0a0006
+int color background_floating_material_light 0x7f0a0007
+int color background_material_dark 0x7f0a0008
+int color background_material_light 0x7f0a0009
+int color bright_foreground_disabled_material_dark 0x7f0a000a
+int color bright_foreground_disabled_material_light 0x7f0a000b
+int color bright_foreground_inverse_material_dark 0x7f0a000c
+int color bright_foreground_inverse_material_light 0x7f0a000d
+int color bright_foreground_material_dark 0x7f0a000e
+int color bright_foreground_material_light 0x7f0a000f
+int color button_material_dark 0x7f0a0010
+int color button_material_light 0x7f0a0011
+int color dim_foreground_disabled_material_dark 0x7f0a0012
+int color dim_foreground_disabled_material_light 0x7f0a0013
+int color dim_foreground_material_dark 0x7f0a0014
+int color dim_foreground_material_light 0x7f0a0015
+int color foreground_material_dark 0x7f0a0016
+int color foreground_material_light 0x7f0a0017
+int color highlighted_text_material_dark 0x7f0a0018
+int color highlighted_text_material_light 0x7f0a0019
+int color hint_foreground_material_dark 0x7f0a001a
+int color hint_foreground_material_light 0x7f0a001b
+int color material_blue_grey_800 0x7f0a001c
+int color material_blue_grey_900 0x7f0a001d
+int color material_blue_grey_950 0x7f0a001e
+int color material_deep_teal_200 0x7f0a001f
+int color material_deep_teal_500 0x7f0a0020
+int color material_grey_100 0x7f0a0021
+int color material_grey_300 0x7f0a0022
+int color material_grey_50 0x7f0a0023
+int color material_grey_600 0x7f0a0024
+int color material_grey_800 0x7f0a0025
+int color material_grey_850 0x7f0a0026
+int color material_grey_900 0x7f0a0027
+int color primary_dark_material_dark 0x7f0a0028
+int color primary_dark_material_light 0x7f0a0029
+int color primary_material_dark 0x7f0a002a
+int color primary_material_light 0x7f0a002b
+int color primary_text_default_material_dark 0x7f0a002c
+int color primary_text_default_material_light 0x7f0a002d
+int color primary_text_disabled_material_dark 0x7f0a002e
+int color primary_text_disabled_material_light 0x7f0a002f
+int color ripple_material_dark 0x7f0a0030
+int color ripple_material_light 0x7f0a0031
+int color secondary_text_default_material_dark 0x7f0a0032
+int color secondary_text_default_material_light 0x7f0a0033
+int color secondary_text_disabled_material_dark 0x7f0a0034
+int color secondary_text_disabled_material_light 0x7f0a0035
+int color switch_thumb_disabled_material_dark 0x7f0a0036
+int color switch_thumb_disabled_material_light 0x7f0a0037
+int color switch_thumb_material_dark 0x7f0a0044
+int color switch_thumb_material_light 0x7f0a0045
+int color switch_thumb_normal_material_dark 0x7f0a0038
+int color switch_thumb_normal_material_light 0x7f0a0039
+int dimen abc_action_bar_content_inset_material 0x7f07000d
+int dimen abc_action_bar_default_height_material 0x7f070001
+int dimen abc_action_bar_default_padding_end_material 0x7f07000e
+int dimen abc_action_bar_default_padding_start_material 0x7f07000f
+int dimen abc_action_bar_icon_vertical_padding_material 0x7f070011
+int dimen abc_action_bar_overflow_padding_end_material 0x7f070012
+int dimen abc_action_bar_overflow_padding_start_material 0x7f070013
+int dimen abc_action_bar_progress_bar_size 0x7f070002
+int dimen abc_action_bar_stacked_max_height 0x7f070014
+int dimen abc_action_bar_stacked_tab_max_width 0x7f070015
+int dimen abc_action_bar_subtitle_bottom_margin_material 0x7f070016
+int dimen abc_action_bar_subtitle_top_margin_material 0x7f070017
+int dimen abc_action_button_min_height_material 0x7f070018
+int dimen abc_action_button_min_width_material 0x7f070019
+int dimen abc_action_button_min_width_overflow_material 0x7f07001a
+int dimen abc_alert_dialog_button_bar_height 0x7f070000
+int dimen abc_button_inset_horizontal_material 0x7f07001b
+int dimen abc_button_inset_vertical_material 0x7f07001c
+int dimen abc_button_padding_horizontal_material 0x7f07001d
+int dimen abc_button_padding_vertical_material 0x7f07001e
+int dimen abc_config_prefDialogWidth 0x7f070005
+int dimen abc_control_corner_material 0x7f07001f
+int dimen abc_control_inset_material 0x7f070020
+int dimen abc_control_padding_material 0x7f070021
+int dimen abc_dialog_fixed_height_major 0x7f070006
+int dimen abc_dialog_fixed_height_minor 0x7f070007
+int dimen abc_dialog_fixed_width_major 0x7f070008
+int dimen abc_dialog_fixed_width_minor 0x7f070009
+int dimen abc_dialog_list_padding_vertical_material 0x7f070022
+int dimen abc_dialog_min_width_major 0x7f07000a
+int dimen abc_dialog_min_width_minor 0x7f07000b
+int dimen abc_dialog_padding_material 0x7f070023
+int dimen abc_dialog_padding_top_material 0x7f070024
+int dimen abc_disabled_alpha_material_dark 0x7f070025
+int dimen abc_disabled_alpha_material_light 0x7f070026
+int dimen abc_dropdownitem_icon_width 0x7f070027
+int dimen abc_dropdownitem_text_padding_left 0x7f070028
+int dimen abc_dropdownitem_text_padding_right 0x7f070029
+int dimen abc_edit_text_inset_bottom_material 0x7f07002a
+int dimen abc_edit_text_inset_horizontal_material 0x7f07002b
+int dimen abc_edit_text_inset_top_material 0x7f07002c
+int dimen abc_floating_window_z 0x7f07002d
+int dimen abc_list_item_padding_horizontal_material 0x7f07002e
+int dimen abc_panel_menu_list_width 0x7f07002f
+int dimen abc_search_view_preferred_width 0x7f070030
+int dimen abc_search_view_text_min_width 0x7f07000c
+int dimen abc_seekbar_track_background_height_material 0x7f070031
+int dimen abc_seekbar_track_progress_height_material 0x7f070032
+int dimen abc_select_dialog_padding_start_material 0x7f070033
+int dimen abc_switch_padding 0x7f070010
+int dimen abc_text_size_body_1_material 0x7f070034
+int dimen abc_text_size_body_2_material 0x7f070035
+int dimen abc_text_size_button_material 0x7f070036
+int dimen abc_text_size_caption_material 0x7f070037
+int dimen abc_text_size_display_1_material 0x7f070038
+int dimen abc_text_size_display_2_material 0x7f070039
+int dimen abc_text_size_display_3_material 0x7f07003a
+int dimen abc_text_size_display_4_material 0x7f07003b
+int dimen abc_text_size_headline_material 0x7f07003c
+int dimen abc_text_size_large_material 0x7f07003d
+int dimen abc_text_size_medium_material 0x7f07003e
+int dimen abc_text_size_menu_material 0x7f07003f
+int dimen abc_text_size_small_material 0x7f070040
+int dimen abc_text_size_subhead_material 0x7f070041
+int dimen abc_text_size_subtitle_material_toolbar 0x7f070003
+int dimen abc_text_size_title_material 0x7f070042
+int dimen abc_text_size_title_material_toolbar 0x7f070004
+int dimen disabled_alpha_material_dark 0x7f070043
+int dimen disabled_alpha_material_light 0x7f070044
+int dimen highlight_alpha_material_colored 0x7f070045
+int dimen highlight_alpha_material_dark 0x7f070046
+int dimen highlight_alpha_material_light 0x7f070047
+int dimen notification_large_icon_height 0x7f070048
+int dimen notification_large_icon_width 0x7f070049
+int dimen notification_subtext_size 0x7f07004a
+int drawable abc_ab_share_pack_mtrl_alpha 0x7f020000
+int drawable abc_action_bar_item_background_material 0x7f020001
+int drawable abc_btn_borderless_material 0x7f020002
+int drawable abc_btn_check_material 0x7f020003
+int drawable abc_btn_check_to_on_mtrl_000 0x7f020004
+int drawable abc_btn_check_to_on_mtrl_015 0x7f020005
+int drawable abc_btn_colored_material 0x7f020006
+int drawable abc_btn_default_mtrl_shape 0x7f020007
+int drawable abc_btn_radio_material 0x7f020008
+int drawable abc_btn_radio_to_on_mtrl_000 0x7f020009
+int drawable abc_btn_radio_to_on_mtrl_015 0x7f02000a
+int drawable abc_btn_rating_star_off_mtrl_alpha 0x7f02000b
+int drawable abc_btn_rating_star_on_mtrl_alpha 0x7f02000c
+int drawable abc_btn_switch_to_on_mtrl_00001 0x7f02000d
+int drawable abc_btn_switch_to_on_mtrl_00012 0x7f02000e
+int drawable abc_cab_background_internal_bg 0x7f02000f
+int drawable abc_cab_background_top_material 0x7f020010
+int drawable abc_cab_background_top_mtrl_alpha 0x7f020011
+int drawable abc_control_background_material 0x7f020012
+int drawable abc_dialog_material_background_dark 0x7f020013
+int drawable abc_dialog_material_background_light 0x7f020014
+int drawable abc_edit_text_material 0x7f020015
+int drawable abc_ic_ab_back_mtrl_am_alpha 0x7f020016
+int drawable abc_ic_clear_mtrl_alpha 0x7f020017
+int drawable abc_ic_commit_search_api_mtrl_alpha 0x7f020018
+int drawable abc_ic_go_search_api_mtrl_alpha 0x7f020019
+int drawable abc_ic_menu_copy_mtrl_am_alpha 0x7f02001a
+int drawable abc_ic_menu_cut_mtrl_alpha 0x7f02001b
+int drawable abc_ic_menu_moreoverflow_mtrl_alpha 0x7f02001c
+int drawable abc_ic_menu_paste_mtrl_am_alpha 0x7f02001d
+int drawable abc_ic_menu_selectall_mtrl_alpha 0x7f02001e
+int drawable abc_ic_menu_share_mtrl_alpha 0x7f02001f
+int drawable abc_ic_search_api_mtrl_alpha 0x7f020020
+int drawable abc_ic_voice_search_api_mtrl_alpha 0x7f020021
+int drawable abc_item_background_holo_dark 0x7f020022
+int drawable abc_item_background_holo_light 0x7f020023
+int drawable abc_list_divider_mtrl_alpha 0x7f020024
+int drawable abc_list_focused_holo 0x7f020025
+int drawable abc_list_longpressed_holo 0x7f020026
+int drawable abc_list_pressed_holo_dark 0x7f020027
+int drawable abc_list_pressed_holo_light 0x7f020028
+int drawable abc_list_selector_background_transition_holo_dark 0x7f020029
+int drawable abc_list_selector_background_transition_holo_light 0x7f02002a
+int drawable abc_list_selector_disabled_holo_dark 0x7f02002b
+int drawable abc_list_selector_disabled_holo_light 0x7f02002c
+int drawable abc_list_selector_holo_dark 0x7f02002d
+int drawable abc_list_selector_holo_light 0x7f02002e
+int drawable abc_menu_hardkey_panel_mtrl_mult 0x7f02002f
+int drawable abc_popup_background_mtrl_mult 0x7f020030
+int drawable abc_ratingbar_full_material 0x7f020031
+int drawable abc_scrubber_control_off_mtrl_alpha 0x7f020032
+int drawable abc_scrubber_control_to_pressed_mtrl_000 0x7f020033
+int drawable abc_scrubber_control_to_pressed_mtrl_005 0x7f020034
+int drawable abc_scrubber_primary_mtrl_alpha 0x7f020035
+int drawable abc_scrubber_track_mtrl_alpha 0x7f020036
+int drawable abc_seekbar_thumb_material 0x7f020037
+int drawable abc_seekbar_track_material 0x7f020038
+int drawable abc_spinner_mtrl_am_alpha 0x7f020039
+int drawable abc_spinner_textfield_background_material 0x7f02003a
+int drawable abc_switch_thumb_material 0x7f02003b
+int drawable abc_switch_track_mtrl_alpha 0x7f02003c
+int drawable abc_tab_indicator_material 0x7f02003d
+int drawable abc_tab_indicator_mtrl_alpha 0x7f02003e
+int drawable abc_text_cursor_material 0x7f02003f
+int drawable abc_textfield_activated_mtrl_alpha 0x7f020040
+int drawable abc_textfield_default_mtrl_alpha 0x7f020041
+int drawable abc_textfield_search_activated_mtrl_alpha 0x7f020042
+int drawable abc_textfield_search_default_mtrl_alpha 0x7f020043
+int drawable abc_textfield_search_material 0x7f020044
+int drawable notification_template_icon_bg 0x7f020045
+int id action0 0x7f0b0050
+int id action_bar 0x7f0b0041
+int id action_bar_activity_content 0x7f0b0000
+int id action_bar_container 0x7f0b0040
+int id action_bar_root 0x7f0b003c
+int id action_bar_spinner 0x7f0b0001
+int id action_bar_subtitle 0x7f0b0022
+int id action_bar_title 0x7f0b0021
+int id action_context_bar 0x7f0b0042
+int id action_divider 0x7f0b0054
+int id action_menu_divider 0x7f0b0002
+int id action_menu_presenter 0x7f0b0003
+int id action_mode_bar 0x7f0b003e
+int id action_mode_bar_stub 0x7f0b003d
+int id action_mode_close_button 0x7f0b0023
+int id activity_chooser_view_content 0x7f0b0024
+int id alertTitle 0x7f0b0030
+int id always 0x7f0b001b
+int id beginning 0x7f0b0018
+int id buttonPanel 0x7f0b002b
+int id cancel_action 0x7f0b0051
+int id checkbox 0x7f0b0039
+int id chronometer 0x7f0b0057
+int id collapseActionView 0x7f0b001c
+int id contentPanel 0x7f0b0031
+int id custom 0x7f0b0037
+int id customPanel 0x7f0b0036
+int id decor_content_parent 0x7f0b003f
+int id default_activity_button 0x7f0b0027
+int id disableHome 0x7f0b000c
+int id edit_query 0x7f0b0043
+int id end 0x7f0b0019
+int id end_padder 0x7f0b005c
+int id expand_activities_button 0x7f0b0025
+int id expanded_menu 0x7f0b0038
+int id home 0x7f0b0004
+int id homeAsUp 0x7f0b000d
+int id icon 0x7f0b0029
+int id ifRoom 0x7f0b001d
+int id image 0x7f0b0026
+int id info 0x7f0b005b
+int id line1 0x7f0b0055
+int id line3 0x7f0b0059
+int id listMode 0x7f0b0009
+int id list_item 0x7f0b0028
+int id media_actions 0x7f0b0053
+int id middle 0x7f0b001a
+int id multiply 0x7f0b0013
+int id never 0x7f0b001e
+int id none 0x7f0b000e
+int id normal 0x7f0b000a
+int id parentPanel 0x7f0b002d
+int id progress_circular 0x7f0b0005
+int id progress_horizontal 0x7f0b0006
+int id radio 0x7f0b003b
+int id screen 0x7f0b0014
+int id scrollIndicatorDown 0x7f0b0035
+int id scrollIndicatorUp 0x7f0b0032
+int id scrollView 0x7f0b0033
+int id search_badge 0x7f0b0045
+int id search_bar 0x7f0b0044
+int id search_button 0x7f0b0046
+int id search_close_btn 0x7f0b004b
+int id search_edit_frame 0x7f0b0047
+int id search_go_btn 0x7f0b004d
+int id search_mag_icon 0x7f0b0048
+int id search_plate 0x7f0b0049
+int id search_src_text 0x7f0b004a
+int id search_voice_btn 0x7f0b004e
+int id select_dialog_listview 0x7f0b004f
+int id shortcut 0x7f0b003a
+int id showCustom 0x7f0b000f
+int id showHome 0x7f0b0010
+int id showTitle 0x7f0b0011
+int id spacer 0x7f0b002c
+int id split_action_bar 0x7f0b0007
+int id src_atop 0x7f0b0015
+int id src_in 0x7f0b0016
+int id src_over 0x7f0b0017
+int id status_bar_latest_event_content 0x7f0b0052
+int id submit_area 0x7f0b004c
+int id tabMode 0x7f0b000b
+int id text 0x7f0b005a
+int id text2 0x7f0b0058
+int id textSpacerNoButtons 0x7f0b0034
+int id time 0x7f0b0056
+int id title 0x7f0b002a
+int id title_template 0x7f0b002f
+int id topPanel 0x7f0b002e
+int id up 0x7f0b0008
+int id useLogo 0x7f0b0012
+int id withText 0x7f0b001f
+int id wrap_content 0x7f0b0020
+int integer abc_config_activityDefaultDur 0x7f090001
+int integer abc_config_activityShortDur 0x7f090002
int integer abc_max_action_buttons 0x7f090000
-int layout abc_action_bar_decor 0x7f030000
-int layout abc_action_bar_decor_include 0x7f030001
-int layout abc_action_bar_decor_overlay 0x7f030002
-int layout abc_action_bar_home 0x7f030003
-int layout abc_action_bar_tab 0x7f030004
-int layout abc_action_bar_tabbar 0x7f030005
-int layout abc_action_bar_title_item 0x7f030006
-int layout abc_action_bar_view_list_nav_layout 0x7f030007
-int layout abc_action_menu_item_layout 0x7f030008
-int layout abc_action_menu_layout 0x7f030009
-int layout abc_action_mode_bar 0x7f03000a
-int layout abc_action_mode_close_item 0x7f03000b
-int layout abc_activity_chooser_view 0x7f03000c
-int layout abc_activity_chooser_view_include 0x7f03000d
-int layout abc_activity_chooser_view_list_item 0x7f03000e
-int layout abc_expanded_menu_layout 0x7f03000f
-int layout abc_list_menu_item_checkbox 0x7f030010
-int layout abc_list_menu_item_icon 0x7f030011
-int layout abc_list_menu_item_layout 0x7f030012
-int layout abc_list_menu_item_radio 0x7f030013
-int layout abc_popup_menu_item_layout 0x7f030014
-int layout abc_search_dropdown_item_icons_2line 0x7f030015
-int layout abc_search_view 0x7f030016
-int layout abc_simple_decor 0x7f030017
-int layout support_simple_spinner_dropdown_item 0x7f030018
-int string abc_action_bar_home_description 0x7f0a0000
-int string abc_action_bar_up_description 0x7f0a0001
-int string abc_action_menu_overflow_description 0x7f0a0002
-int string abc_action_mode_done 0x7f0a0003
-int string abc_activity_chooser_view_see_all 0x7f0a0004
-int string abc_activitychooserview_choose_application 0x7f0a0005
-int string abc_searchview_description_clear 0x7f0a0006
-int string abc_searchview_description_query 0x7f0a0007
-int string abc_searchview_description_search 0x7f0a0008
-int string abc_searchview_description_submit 0x7f0a0009
-int string abc_searchview_description_voice 0x7f0a000a
-int string abc_shareactionprovider_share_with 0x7f0a000b
-int string abc_shareactionprovider_share_with_application 0x7f0a000c
-int style TextAppearance_AppCompat_Base_CompactMenu_Dialog 0x7f0b0000
-int style TextAppearance_AppCompat_Base_SearchResult 0x7f0b0001
-int style TextAppearance_AppCompat_Base_SearchResult_Subtitle 0x7f0b0002
-int style TextAppearance_AppCompat_Base_SearchResult_Title 0x7f0b0003
-int style TextAppearance_AppCompat_Base_Widget_PopupMenu_Large 0x7f0b0004
-int style TextAppearance_AppCompat_Base_Widget_PopupMenu_Small 0x7f0b0005
-int style TextAppearance_AppCompat_Light_Base_SearchResult 0x7f0b0006
-int style TextAppearance_AppCompat_Light_Base_SearchResult_Subtitle 0x7f0b0007
-int style TextAppearance_AppCompat_Light_Base_SearchResult_Title 0x7f0b0008
-int style TextAppearance_AppCompat_Light_Base_Widget_PopupMenu_Large 0x7f0b0009
-int style TextAppearance_AppCompat_Light_Base_Widget_PopupMenu_Small 0x7f0b000a
-int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f0b000b
-int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f0b000c
-int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f0b000d
-int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f0b000e
-int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f0b000f
-int style TextAppearance_AppCompat_SearchResult_Title 0x7f0b0010
-int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f0b0011
-int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f0b0012
-int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f0b0013
-int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f0b0014
-int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f0b0015
-int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f0b0016
-int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f0b0017
-int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f0b0018
-int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f0b0019
-int style TextAppearance_AppCompat_Widget_Base_ActionBar_Menu 0x7f0b001a
-int style TextAppearance_AppCompat_Widget_Base_ActionBar_Subtitle 0x7f0b001b
-int style TextAppearance_AppCompat_Widget_Base_ActionBar_Subtitle_Inverse 0x7f0b001c
-int style TextAppearance_AppCompat_Widget_Base_ActionBar_Title 0x7f0b001d
-int style TextAppearance_AppCompat_Widget_Base_ActionBar_Title_Inverse 0x7f0b001e
-int style TextAppearance_AppCompat_Widget_Base_ActionMode_Subtitle 0x7f0b001f
-int style TextAppearance_AppCompat_Widget_Base_ActionMode_Subtitle_Inverse 0x7f0b0020
-int style TextAppearance_AppCompat_Widget_Base_ActionMode_Title 0x7f0b0021
-int style TextAppearance_AppCompat_Widget_Base_ActionMode_Title_Inverse 0x7f0b0022
-int style TextAppearance_AppCompat_Widget_Base_DropDownItem 0x7f0b0023
-int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f0b0024
-int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f0b0025
-int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f0b0026
-int style TextAppearance_Widget_AppCompat_Base_ExpandedMenu_Item 0x7f0b0027
-int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f0b0028
-int style Theme_AppCompat 0x7f0b0029
-int style Theme_AppCompat_Base_CompactMenu 0x7f0b002a
-int style Theme_AppCompat_Base_CompactMenu_Dialog 0x7f0b002b
-int style Theme_AppCompat_CompactMenu 0x7f0b002c
-int style Theme_AppCompat_CompactMenu_Dialog 0x7f0b002d
-int style Theme_AppCompat_DialogWhenLarge 0x7f0b002e
-int style Theme_AppCompat_Light 0x7f0b002f
-int style Theme_AppCompat_Light_DarkActionBar 0x7f0b0030
-int style Theme_AppCompat_Light_DialogWhenLarge 0x7f0b0031
-int style Theme_Base 0x7f0b0032
-int style Theme_Base_AppCompat 0x7f0b0033
-int style Theme_Base_AppCompat_Dialog_FixedSize 0x7f0b0034
-int style Theme_Base_AppCompat_Dialog_Light_FixedSize 0x7f0b0035
-int style Theme_Base_AppCompat_DialogWhenLarge 0x7f0b0036
-int style Theme_Base_AppCompat_DialogWhenLarge_Base 0x7f0b0089
-int style Theme_Base_AppCompat_Light 0x7f0b0037
-int style Theme_Base_AppCompat_Light_DarkActionBar 0x7f0b0038
-int style Theme_Base_AppCompat_Light_DialogWhenLarge 0x7f0b0039
-int style Theme_Base_AppCompat_Light_DialogWhenLarge_Base 0x7f0b008a
-int style Theme_Base_Light 0x7f0b003a
-int style Widget_AppCompat_ActionBar 0x7f0b003b
-int style Widget_AppCompat_ActionBar_Solid 0x7f0b003c
-int style Widget_AppCompat_ActionBar_TabBar 0x7f0b003d
-int style Widget_AppCompat_ActionBar_TabText 0x7f0b003e
-int style Widget_AppCompat_ActionBar_TabView 0x7f0b003f
-int style Widget_AppCompat_ActionButton 0x7f0b0040
-int style Widget_AppCompat_ActionButton_CloseMode 0x7f0b0041
-int style Widget_AppCompat_ActionButton_Overflow 0x7f0b0042
-int style Widget_AppCompat_ActionMode 0x7f0b0043
-int style Widget_AppCompat_ActivityChooserView 0x7f0b0044
-int style Widget_AppCompat_AutoCompleteTextView 0x7f0b0045
-int style Widget_AppCompat_Base_ActionBar 0x7f0b0046
-int style Widget_AppCompat_Base_ActionBar_Solid 0x7f0b0047
-int style Widget_AppCompat_Base_ActionBar_TabBar 0x7f0b0048
-int style Widget_AppCompat_Base_ActionBar_TabText 0x7f0b0049
-int style Widget_AppCompat_Base_ActionBar_TabView 0x7f0b004a
-int style Widget_AppCompat_Base_ActionButton 0x7f0b004b
-int style Widget_AppCompat_Base_ActionButton_CloseMode 0x7f0b004c
-int style Widget_AppCompat_Base_ActionButton_Overflow 0x7f0b004d
-int style Widget_AppCompat_Base_ActionMode 0x7f0b004e
-int style Widget_AppCompat_Base_ActivityChooserView 0x7f0b004f
-int style Widget_AppCompat_Base_AutoCompleteTextView 0x7f0b0050
-int style Widget_AppCompat_Base_DropDownItem_Spinner 0x7f0b0051
-int style Widget_AppCompat_Base_ListPopupWindow 0x7f0b0052
-int style Widget_AppCompat_Base_ListView_DropDown 0x7f0b0053
-int style Widget_AppCompat_Base_ListView_Menu 0x7f0b0054
-int style Widget_AppCompat_Base_PopupMenu 0x7f0b0055
-int style Widget_AppCompat_Base_ProgressBar 0x7f0b0056
-int style Widget_AppCompat_Base_ProgressBar_Horizontal 0x7f0b0057
-int style Widget_AppCompat_Base_Spinner 0x7f0b0058
-int style Widget_AppCompat_DropDownItem_Spinner 0x7f0b0059
-int style Widget_AppCompat_Light_ActionBar 0x7f0b005a
-int style Widget_AppCompat_Light_ActionBar_Solid 0x7f0b005b
-int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f0b005c
-int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f0b005d
-int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f0b005e
-int style Widget_AppCompat_Light_ActionBar_TabText 0x7f0b005f
-int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f0b0060
-int style Widget_AppCompat_Light_ActionBar_TabView 0x7f0b0061
-int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f0b0062
-int style Widget_AppCompat_Light_ActionButton 0x7f0b0063
-int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f0b0064
-int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f0b0065
-int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f0b0066
-int style Widget_AppCompat_Light_ActivityChooserView 0x7f0b0067
-int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f0b0068
-int style Widget_AppCompat_Light_Base_ActionBar 0x7f0b0069
-int style Widget_AppCompat_Light_Base_ActionBar_Solid 0x7f0b006a
-int style Widget_AppCompat_Light_Base_ActionBar_Solid_Inverse 0x7f0b006b
-int style Widget_AppCompat_Light_Base_ActionBar_TabBar 0x7f0b006c
-int style Widget_AppCompat_Light_Base_ActionBar_TabBar_Inverse 0x7f0b006d
-int style Widget_AppCompat_Light_Base_ActionBar_TabText 0x7f0b006e
-int style Widget_AppCompat_Light_Base_ActionBar_TabText_Inverse 0x7f0b006f
-int style Widget_AppCompat_Light_Base_ActionBar_TabView 0x7f0b0070
-int style Widget_AppCompat_Light_Base_ActionBar_TabView_Inverse 0x7f0b0071
-int style Widget_AppCompat_Light_Base_ActionButton 0x7f0b0072
-int style Widget_AppCompat_Light_Base_ActionButton_CloseMode 0x7f0b0073
-int style Widget_AppCompat_Light_Base_ActionButton_Overflow 0x7f0b0074
-int style Widget_AppCompat_Light_Base_ActionMode_Inverse 0x7f0b0075
-int style Widget_AppCompat_Light_Base_ActivityChooserView 0x7f0b0076
-int style Widget_AppCompat_Light_Base_AutoCompleteTextView 0x7f0b0077
-int style Widget_AppCompat_Light_Base_DropDownItem_Spinner 0x7f0b0078
-int style Widget_AppCompat_Light_Base_ListPopupWindow 0x7f0b0079
-int style Widget_AppCompat_Light_Base_ListView_DropDown 0x7f0b007a
-int style Widget_AppCompat_Light_Base_PopupMenu 0x7f0b007b
-int style Widget_AppCompat_Light_Base_Spinner 0x7f0b007c
-int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f0b007d
-int style Widget_AppCompat_Light_ListPopupWindow 0x7f0b007e
-int style Widget_AppCompat_Light_ListView_DropDown 0x7f0b007f
-int style Widget_AppCompat_Light_PopupMenu 0x7f0b0080
-int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f0b0081
-int style Widget_AppCompat_ListPopupWindow 0x7f0b0082
-int style Widget_AppCompat_ListView_DropDown 0x7f0b0083
-int style Widget_AppCompat_ListView_Menu 0x7f0b0084
-int style Widget_AppCompat_PopupMenu 0x7f0b0085
-int style Widget_AppCompat_ProgressBar 0x7f0b0086
-int style Widget_AppCompat_ProgressBar_Horizontal 0x7f0b0087
-int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f0b0088
-int[] styleable ActionBar { 0x7f010020, 0x7f01003e, 0x7f01003f, 0x7f010040, 0x7f010041, 0x7f010042, 0x7f010043, 0x7f010044, 0x7f010045, 0x7f010046, 0x7f010047, 0x7f010048, 0x7f010049, 0x7f01004a, 0x7f01004b, 0x7f01004c, 0x7f01004d, 0x7f01004e, 0x7f01004f }
+int integer cancel_button_image_alpha 0x7f090003
+int integer status_bar_notification_info_maxnum 0x7f090004
+int layout abc_action_bar_title_item 0x7f030000
+int layout abc_action_bar_up_container 0x7f030001
+int layout abc_action_bar_view_list_nav_layout 0x7f030002
+int layout abc_action_menu_item_layout 0x7f030003
+int layout abc_action_menu_layout 0x7f030004
+int layout abc_action_mode_bar 0x7f030005
+int layout abc_action_mode_close_item_material 0x7f030006
+int layout abc_activity_chooser_view 0x7f030007
+int layout abc_activity_chooser_view_list_item 0x7f030008
+int layout abc_alert_dialog_button_bar_material 0x7f030009
+int layout abc_alert_dialog_material 0x7f03000a
+int layout abc_dialog_title_material 0x7f03000b
+int layout abc_expanded_menu_layout 0x7f03000c
+int layout abc_list_menu_item_checkbox 0x7f03000d
+int layout abc_list_menu_item_icon 0x7f03000e
+int layout abc_list_menu_item_layout 0x7f03000f
+int layout abc_list_menu_item_radio 0x7f030010
+int layout abc_popup_menu_item_layout 0x7f030011
+int layout abc_screen_content_include 0x7f030012
+int layout abc_screen_simple 0x7f030013
+int layout abc_screen_simple_overlay_action_mode 0x7f030014
+int layout abc_screen_toolbar 0x7f030015
+int layout abc_search_dropdown_item_icons_2line 0x7f030016
+int layout abc_search_view 0x7f030017
+int layout abc_select_dialog_material 0x7f030018
+int layout notification_media_action 0x7f030019
+int layout notification_media_cancel_action 0x7f03001a
+int layout notification_template_big_media 0x7f03001b
+int layout notification_template_big_media_narrow 0x7f03001c
+int layout notification_template_lines 0x7f03001d
+int layout notification_template_media 0x7f03001e
+int layout notification_template_part_chronometer 0x7f03001f
+int layout notification_template_part_time 0x7f030020
+int layout select_dialog_item_material 0x7f030021
+int layout select_dialog_multichoice_material 0x7f030022
+int layout select_dialog_singlechoice_material 0x7f030023
+int layout support_simple_spinner_dropdown_item 0x7f030024
+int string abc_action_bar_home_description 0x7f050000
+int string abc_action_bar_home_description_format 0x7f050001
+int string abc_action_bar_home_subtitle_description_format 0x7f050002
+int string abc_action_bar_up_description 0x7f050003
+int string abc_action_menu_overflow_description 0x7f050004
+int string abc_action_mode_done 0x7f050005
+int string abc_activity_chooser_view_see_all 0x7f050006
+int string abc_activitychooserview_choose_application 0x7f050007
+int string abc_capital_off 0x7f050008
+int string abc_capital_on 0x7f050009
+int string abc_search_hint 0x7f05000a
+int string abc_searchview_description_clear 0x7f05000b
+int string abc_searchview_description_query 0x7f05000c
+int string abc_searchview_description_search 0x7f05000d
+int string abc_searchview_description_submit 0x7f05000e
+int string abc_searchview_description_voice 0x7f05000f
+int string abc_shareactionprovider_share_with 0x7f050010
+int string abc_shareactionprovider_share_with_application 0x7f050011
+int string abc_toolbar_collapse_description 0x7f050012
+int string status_bar_notification_info_overflow 0x7f050013
+int style AlertDialog_AppCompat 0x7f08007d
+int style AlertDialog_AppCompat_Light 0x7f08007e
+int style Animation_AppCompat_Dialog 0x7f08007f
+int style Animation_AppCompat_DropDownUp 0x7f080080
+int style Base_AlertDialog_AppCompat 0x7f080081
+int style Base_AlertDialog_AppCompat_Light 0x7f080082
+int style Base_Animation_AppCompat_Dialog 0x7f080083
+int style Base_Animation_AppCompat_DropDownUp 0x7f080084
+int style Base_DialogWindowTitle_AppCompat 0x7f080085
+int style Base_DialogWindowTitleBackground_AppCompat 0x7f080086
+int style Base_TextAppearance_AppCompat 0x7f08002f
+int style Base_TextAppearance_AppCompat_Body1 0x7f080030
+int style Base_TextAppearance_AppCompat_Body2 0x7f080031
+int style Base_TextAppearance_AppCompat_Button 0x7f080019
+int style Base_TextAppearance_AppCompat_Caption 0x7f080032
+int style Base_TextAppearance_AppCompat_Display1 0x7f080033
+int style Base_TextAppearance_AppCompat_Display2 0x7f080034
+int style Base_TextAppearance_AppCompat_Display3 0x7f080035
+int style Base_TextAppearance_AppCompat_Display4 0x7f080036
+int style Base_TextAppearance_AppCompat_Headline 0x7f080037
+int style Base_TextAppearance_AppCompat_Inverse 0x7f080004
+int style Base_TextAppearance_AppCompat_Large 0x7f080038
+int style Base_TextAppearance_AppCompat_Large_Inverse 0x7f080005
+int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f080039
+int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f08003a
+int style Base_TextAppearance_AppCompat_Medium 0x7f08003b
+int style Base_TextAppearance_AppCompat_Medium_Inverse 0x7f080006
+int style Base_TextAppearance_AppCompat_Menu 0x7f08003c
+int style Base_TextAppearance_AppCompat_SearchResult 0x7f080087
+int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x7f08003d
+int style Base_TextAppearance_AppCompat_SearchResult_Title 0x7f08003e
+int style Base_TextAppearance_AppCompat_Small 0x7f08003f
+int style Base_TextAppearance_AppCompat_Small_Inverse 0x7f080007
+int style Base_TextAppearance_AppCompat_Subhead 0x7f080040
+int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x7f080008
+int style Base_TextAppearance_AppCompat_Title 0x7f080041
+int style Base_TextAppearance_AppCompat_Title_Inverse 0x7f080009
+int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f080042
+int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f080043
+int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f080044
+int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f080045
+int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f080046
+int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f080047
+int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f080048
+int style Base_TextAppearance_AppCompat_Widget_Button 0x7f080049
+int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x7f080079
+int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x7f080088
+int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f08004a
+int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f08004b
+int style Base_TextAppearance_AppCompat_Widget_Switch 0x7f08004c
+int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f08004d
+int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f080089
+int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f08004e
+int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f08004f
+int style Base_Theme_AppCompat 0x7f080050
+int style Base_Theme_AppCompat_CompactMenu 0x7f08008a
+int style Base_Theme_AppCompat_Dialog 0x7f08000a
+int style Base_Theme_AppCompat_Dialog_Alert 0x7f08008b
+int style Base_Theme_AppCompat_Dialog_FixedSize 0x7f08008c
+int style Base_Theme_AppCompat_Dialog_MinWidth 0x7f08008d
+int style Base_Theme_AppCompat_DialogWhenLarge 0x7f080001
+int style Base_Theme_AppCompat_Light 0x7f080051
+int style Base_Theme_AppCompat_Light_DarkActionBar 0x7f08008e
+int style Base_Theme_AppCompat_Light_Dialog 0x7f08000b
+int style Base_Theme_AppCompat_Light_Dialog_Alert 0x7f08008f
+int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x7f080090
+int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x7f080091
+int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x7f080002
+int style Base_ThemeOverlay_AppCompat 0x7f080092
+int style Base_ThemeOverlay_AppCompat_ActionBar 0x7f080093
+int style Base_ThemeOverlay_AppCompat_Dark 0x7f080094
+int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x7f080095
+int style Base_ThemeOverlay_AppCompat_Light 0x7f080096
+int style Base_V11_Theme_AppCompat_Dialog 0x7f08000c
+int style Base_V11_Theme_AppCompat_Light_Dialog 0x7f08000d
+int style Base_V12_Widget_AppCompat_AutoCompleteTextView 0x7f080015
+int style Base_V12_Widget_AppCompat_EditText 0x7f080016
+int style Base_V21_Theme_AppCompat 0x7f080052
+int style Base_V21_Theme_AppCompat_Dialog 0x7f080053
+int style Base_V21_Theme_AppCompat_Light 0x7f080054
+int style Base_V21_Theme_AppCompat_Light_Dialog 0x7f080055
+int style Base_V22_Theme_AppCompat 0x7f080077
+int style Base_V22_Theme_AppCompat_Light 0x7f080078
+int style Base_V23_Theme_AppCompat 0x7f08007a
+int style Base_V23_Theme_AppCompat_Light 0x7f08007b
+int style Base_V7_Theme_AppCompat 0x7f080097
+int style Base_V7_Theme_AppCompat_Dialog 0x7f080098
+int style Base_V7_Theme_AppCompat_Light 0x7f080099
+int style Base_V7_Theme_AppCompat_Light_Dialog 0x7f08009a
+int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x7f08009b
+int style Base_V7_Widget_AppCompat_EditText 0x7f08009c
+int style Base_Widget_AppCompat_ActionBar 0x7f08009d
+int style Base_Widget_AppCompat_ActionBar_Solid 0x7f08009e
+int style Base_Widget_AppCompat_ActionBar_TabBar 0x7f08009f
+int style Base_Widget_AppCompat_ActionBar_TabText 0x7f080056
+int style Base_Widget_AppCompat_ActionBar_TabView 0x7f080057
+int style Base_Widget_AppCompat_ActionButton 0x7f080058
+int style Base_Widget_AppCompat_ActionButton_CloseMode 0x7f080059
+int style Base_Widget_AppCompat_ActionButton_Overflow 0x7f08005a
+int style Base_Widget_AppCompat_ActionMode 0x7f0800a0
+int style Base_Widget_AppCompat_ActivityChooserView 0x7f0800a1
+int style Base_Widget_AppCompat_AutoCompleteTextView 0x7f080017
+int style Base_Widget_AppCompat_Button 0x7f08005b
+int style Base_Widget_AppCompat_Button_Borderless 0x7f08005c
+int style Base_Widget_AppCompat_Button_Borderless_Colored 0x7f08005d
+int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f0800a2
+int style Base_Widget_AppCompat_Button_Colored 0x7f08007c
+int style Base_Widget_AppCompat_Button_Small 0x7f08005e
+int style Base_Widget_AppCompat_ButtonBar 0x7f08005f
+int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x7f0800a3
+int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x7f080060
+int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x7f080061
+int style Base_Widget_AppCompat_CompoundButton_Switch 0x7f0800a4
+int style Base_Widget_AppCompat_DrawerArrowToggle 0x7f080000
+int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x7f0800a5
+int style Base_Widget_AppCompat_DropDownItem_Spinner 0x7f080062
+int style Base_Widget_AppCompat_EditText 0x7f080018
+int style Base_Widget_AppCompat_ImageButton 0x7f080063
+int style Base_Widget_AppCompat_Light_ActionBar 0x7f0800a6
+int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x7f0800a7
+int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x7f0800a8
+int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x7f080064
+int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f080065
+int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x7f080066
+int style Base_Widget_AppCompat_Light_PopupMenu 0x7f080067
+int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x7f080068
+int style Base_Widget_AppCompat_ListPopupWindow 0x7f080069
+int style Base_Widget_AppCompat_ListView 0x7f08006a
+int style Base_Widget_AppCompat_ListView_DropDown 0x7f08006b
+int style Base_Widget_AppCompat_ListView_Menu 0x7f08006c
+int style Base_Widget_AppCompat_PopupMenu 0x7f08006d
+int style Base_Widget_AppCompat_PopupMenu_Overflow 0x7f08006e
+int style Base_Widget_AppCompat_PopupWindow 0x7f0800a9
+int style Base_Widget_AppCompat_ProgressBar 0x7f08000e
+int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x7f08000f
+int style Base_Widget_AppCompat_RatingBar 0x7f08006f
+int style Base_Widget_AppCompat_SearchView 0x7f0800aa
+int style Base_Widget_AppCompat_SearchView_ActionBar 0x7f0800ab
+int style Base_Widget_AppCompat_SeekBar 0x7f080070
+int style Base_Widget_AppCompat_Spinner 0x7f080071
+int style Base_Widget_AppCompat_Spinner_Underlined 0x7f080003
+int style Base_Widget_AppCompat_TextView_SpinnerItem 0x7f080072
+int style Base_Widget_AppCompat_Toolbar 0x7f0800ac
+int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x7f080073
+int style Platform_AppCompat 0x7f080010
+int style Platform_AppCompat_Light 0x7f080011
+int style Platform_ThemeOverlay_AppCompat 0x7f080074
+int style Platform_ThemeOverlay_AppCompat_Dark 0x7f080075
+int style Platform_ThemeOverlay_AppCompat_Light 0x7f080076
+int style Platform_V11_AppCompat 0x7f080012
+int style Platform_V11_AppCompat_Light 0x7f080013
+int style Platform_V14_AppCompat 0x7f08001a
+int style Platform_V14_AppCompat_Light 0x7f08001b
+int style Platform_Widget_AppCompat_Spinner 0x7f080014
+int style RtlOverlay_DialogWindowTitle_AppCompat 0x7f080021
+int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x7f080022
+int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x7f080023
+int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x7f080024
+int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x7f080025
+int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x7f080026
+int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x7f080027
+int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x7f080028
+int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x7f080029
+int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x7f08002a
+int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x7f08002b
+int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x7f08002c
+int style RtlUnderlay_Widget_AppCompat_ActionButton 0x7f08002d
+int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x7f08002e
+int style TextAppearance_AppCompat 0x7f0800ad
+int style TextAppearance_AppCompat_Body1 0x7f0800ae
+int style TextAppearance_AppCompat_Body2 0x7f0800af
+int style TextAppearance_AppCompat_Button 0x7f0800b0
+int style TextAppearance_AppCompat_Caption 0x7f0800b1
+int style TextAppearance_AppCompat_Display1 0x7f0800b2
+int style TextAppearance_AppCompat_Display2 0x7f0800b3
+int style TextAppearance_AppCompat_Display3 0x7f0800b4
+int style TextAppearance_AppCompat_Display4 0x7f0800b5
+int style TextAppearance_AppCompat_Headline 0x7f0800b6
+int style TextAppearance_AppCompat_Inverse 0x7f0800b7
+int style TextAppearance_AppCompat_Large 0x7f0800b8
+int style TextAppearance_AppCompat_Large_Inverse 0x7f0800b9
+int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f0800ba
+int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f0800bb
+int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f0800bc
+int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f0800bd
+int style TextAppearance_AppCompat_Medium 0x7f0800be
+int style TextAppearance_AppCompat_Medium_Inverse 0x7f0800bf
+int style TextAppearance_AppCompat_Menu 0x7f0800c0
+int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f0800c1
+int style TextAppearance_AppCompat_SearchResult_Title 0x7f0800c2
+int style TextAppearance_AppCompat_Small 0x7f0800c3
+int style TextAppearance_AppCompat_Small_Inverse 0x7f0800c4
+int style TextAppearance_AppCompat_Subhead 0x7f0800c5
+int style TextAppearance_AppCompat_Subhead_Inverse 0x7f0800c6
+int style TextAppearance_AppCompat_Title 0x7f0800c7
+int style TextAppearance_AppCompat_Title_Inverse 0x7f0800c8
+int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f0800c9
+int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f0800ca
+int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f0800cb
+int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f0800cc
+int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f0800cd
+int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f0800ce
+int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f0800cf
+int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f0800d0
+int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f0800d1
+int style TextAppearance_AppCompat_Widget_Button 0x7f0800d2
+int style TextAppearance_AppCompat_Widget_Button_Inverse 0x7f0800d3
+int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f0800d4
+int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f0800d5
+int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f0800d6
+int style TextAppearance_AppCompat_Widget_Switch 0x7f0800d7
+int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f0800d8
+int style TextAppearance_StatusBar_EventContent 0x7f08001c
+int style TextAppearance_StatusBar_EventContent_Info 0x7f08001d
+int style TextAppearance_StatusBar_EventContent_Line2 0x7f08001e
+int style TextAppearance_StatusBar_EventContent_Time 0x7f08001f
+int style TextAppearance_StatusBar_EventContent_Title 0x7f080020
+int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f0800d9
+int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f0800da
+int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f0800db
+int style Theme_AppCompat 0x7f0800dc
+int style Theme_AppCompat_CompactMenu 0x7f0800dd
+int style Theme_AppCompat_Dialog 0x7f0800de
+int style Theme_AppCompat_Dialog_Alert 0x7f0800df
+int style Theme_AppCompat_Dialog_MinWidth 0x7f0800e0
+int style Theme_AppCompat_DialogWhenLarge 0x7f0800e1
+int style Theme_AppCompat_Light 0x7f0800e2
+int style Theme_AppCompat_Light_DarkActionBar 0x7f0800e3
+int style Theme_AppCompat_Light_Dialog 0x7f0800e4
+int style Theme_AppCompat_Light_Dialog_Alert 0x7f0800e5
+int style Theme_AppCompat_Light_Dialog_MinWidth 0x7f0800e6
+int style Theme_AppCompat_Light_DialogWhenLarge 0x7f0800e7
+int style Theme_AppCompat_Light_NoActionBar 0x7f0800e8
+int style Theme_AppCompat_NoActionBar 0x7f0800e9
+int style ThemeOverlay_AppCompat 0x7f0800ea
+int style ThemeOverlay_AppCompat_ActionBar 0x7f0800eb
+int style ThemeOverlay_AppCompat_Dark 0x7f0800ec
+int style ThemeOverlay_AppCompat_Dark_ActionBar 0x7f0800ed
+int style ThemeOverlay_AppCompat_Light 0x7f0800ee
+int style Widget_AppCompat_ActionBar 0x7f0800ef
+int style Widget_AppCompat_ActionBar_Solid 0x7f0800f0
+int style Widget_AppCompat_ActionBar_TabBar 0x7f0800f1
+int style Widget_AppCompat_ActionBar_TabText 0x7f0800f2
+int style Widget_AppCompat_ActionBar_TabView 0x7f0800f3
+int style Widget_AppCompat_ActionButton 0x7f0800f4
+int style Widget_AppCompat_ActionButton_CloseMode 0x7f0800f5
+int style Widget_AppCompat_ActionButton_Overflow 0x7f0800f6
+int style Widget_AppCompat_ActionMode 0x7f0800f7
+int style Widget_AppCompat_ActivityChooserView 0x7f0800f8
+int style Widget_AppCompat_AutoCompleteTextView 0x7f0800f9
+int style Widget_AppCompat_Button 0x7f0800fa
+int style Widget_AppCompat_Button_Borderless 0x7f0800fb
+int style Widget_AppCompat_Button_Borderless_Colored 0x7f0800fc
+int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f0800fd
+int style Widget_AppCompat_Button_Colored 0x7f0800fe
+int style Widget_AppCompat_Button_Small 0x7f0800ff
+int style Widget_AppCompat_ButtonBar 0x7f080100
+int style Widget_AppCompat_ButtonBar_AlertDialog 0x7f080101
+int style Widget_AppCompat_CompoundButton_CheckBox 0x7f080102
+int style Widget_AppCompat_CompoundButton_RadioButton 0x7f080103
+int style Widget_AppCompat_CompoundButton_Switch 0x7f080104
+int style Widget_AppCompat_DrawerArrowToggle 0x7f080105
+int style Widget_AppCompat_DropDownItem_Spinner 0x7f080106
+int style Widget_AppCompat_EditText 0x7f080107
+int style Widget_AppCompat_ImageButton 0x7f080108
+int style Widget_AppCompat_Light_ActionBar 0x7f080109
+int style Widget_AppCompat_Light_ActionBar_Solid 0x7f08010a
+int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f08010b
+int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f08010c
+int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f08010d
+int style Widget_AppCompat_Light_ActionBar_TabText 0x7f08010e
+int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f08010f
+int style Widget_AppCompat_Light_ActionBar_TabView 0x7f080110
+int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f080111
+int style Widget_AppCompat_Light_ActionButton 0x7f080112
+int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f080113
+int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f080114
+int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f080115
+int style Widget_AppCompat_Light_ActivityChooserView 0x7f080116
+int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f080117
+int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f080118
+int style Widget_AppCompat_Light_ListPopupWindow 0x7f080119
+int style Widget_AppCompat_Light_ListView_DropDown 0x7f08011a
+int style Widget_AppCompat_Light_PopupMenu 0x7f08011b
+int style Widget_AppCompat_Light_PopupMenu_Overflow 0x7f08011c
+int style Widget_AppCompat_Light_SearchView 0x7f08011d
+int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f08011e
+int style Widget_AppCompat_ListPopupWindow 0x7f08011f
+int style Widget_AppCompat_ListView 0x7f080120
+int style Widget_AppCompat_ListView_DropDown 0x7f080121
+int style Widget_AppCompat_ListView_Menu 0x7f080122
+int style Widget_AppCompat_PopupMenu 0x7f080123
+int style Widget_AppCompat_PopupMenu_Overflow 0x7f080124
+int style Widget_AppCompat_PopupWindow 0x7f080125
+int style Widget_AppCompat_ProgressBar 0x7f080126
+int style Widget_AppCompat_ProgressBar_Horizontal 0x7f080127
+int style Widget_AppCompat_RatingBar 0x7f080128
+int style Widget_AppCompat_SearchView 0x7f080129
+int style Widget_AppCompat_SearchView_ActionBar 0x7f08012a
+int style Widget_AppCompat_SeekBar 0x7f08012b
+int style Widget_AppCompat_Spinner 0x7f08012c
+int style Widget_AppCompat_Spinner_DropDown 0x7f08012d
+int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f08012e
+int style Widget_AppCompat_Spinner_Underlined 0x7f08012f
+int style Widget_AppCompat_TextView_SpinnerItem 0x7f080130
+int style Widget_AppCompat_Toolbar 0x7f080131
+int style Widget_AppCompat_Toolbar_Button_Navigation 0x7f080132
+int[] styleable ActionBar { 0x7f010001, 0x7f010003, 0x7f010004, 0x7f010005, 0x7f010006, 0x7f010007, 0x7f010008, 0x7f010009, 0x7f01000a, 0x7f01000b, 0x7f01000c, 0x7f01000d, 0x7f01000e, 0x7f01000f, 0x7f010010, 0x7f010011, 0x7f010012, 0x7f010013, 0x7f010014, 0x7f010015, 0x7f010016, 0x7f010017, 0x7f010018, 0x7f010019, 0x7f01001a, 0x7f01001b, 0x7f01007c }
int styleable ActionBar_background 10
int styleable ActionBar_backgroundSplit 12
int styleable ActionBar_backgroundStacked 11
+int styleable ActionBar_contentInsetEnd 21
+int styleable ActionBar_contentInsetLeft 22
+int styleable ActionBar_contentInsetRight 23
+int styleable ActionBar_contentInsetStart 20
int styleable ActionBar_customNavigationLayout 13
int styleable ActionBar_displayOptions 3
int styleable ActionBar_divider 9
+int styleable ActionBar_elevation 24
int styleable ActionBar_height 0
+int styleable ActionBar_hideOnContentScroll 19
+int styleable ActionBar_homeAsUpIndicator 26
int styleable ActionBar_homeLayout 14
int styleable ActionBar_icon 7
int styleable ActionBar_indeterminateProgressStyle 16
int styleable ActionBar_itemPadding 18
int styleable ActionBar_logo 8
int styleable ActionBar_navigationMode 2
+int styleable ActionBar_popupTheme 25
int styleable ActionBar_progressBarPadding 17
int styleable ActionBar_progressBarStyle 15
int styleable ActionBar_subtitle 4
int styleable ActionBar_titleTextStyle 5
int[] styleable ActionBarLayout { 0x010100b3 }
int styleable ActionBarLayout_android_layout_gravity 0
-int[] styleable ActionBarWindow { 0x7f010050, 0x7f010051, 0x7f010052, 0x7f010053, 0x7f010054, 0x7f010055, 0x7f010056 }
-int styleable ActionBarWindow_windowActionBar 0
-int styleable ActionBarWindow_windowActionBarOverlay 1
-int styleable ActionBarWindow_windowFixedHeightMajor 6
-int styleable ActionBarWindow_windowFixedHeightMinor 4
-int styleable ActionBarWindow_windowFixedWidthMajor 3
-int styleable ActionBarWindow_windowFixedWidthMinor 5
-int styleable ActionBarWindow_windowSplitActionBar 2
int[] styleable ActionMenuItemView { 0x0101013f }
int styleable ActionMenuItemView_android_minWidth 0
int[] styleable ActionMenuView { }
-int[] styleable ActionMode { 0x7f010020, 0x7f010042, 0x7f010043, 0x7f010047, 0x7f010049 }
+int[] styleable ActionMode { 0x7f010001, 0x7f010007, 0x7f010008, 0x7f01000c, 0x7f01000e, 0x7f01001c }
int styleable ActionMode_background 3
int styleable ActionMode_backgroundSplit 4
+int styleable ActionMode_closeItemLayout 5
int styleable ActionMode_height 0
int styleable ActionMode_subtitleTextStyle 2
int styleable ActionMode_titleTextStyle 1
-int[] styleable ActivityChooserView { 0x7f010057, 0x7f010058 }
+int[] styleable ActivityChooserView { 0x7f01001d, 0x7f01001e }
int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 1
int styleable ActivityChooserView_initialActivityCount 0
-int[] styleable CompatTextView { 0x7f010059 }
-int styleable CompatTextView_textAllCaps 0
-int[] styleable LinearLayoutICS { 0x7f010046, 0x7f01005a, 0x7f01005b }
-int styleable LinearLayoutICS_divider 0
-int styleable LinearLayoutICS_dividerPadding 2
-int styleable LinearLayoutICS_showDividers 1
+int[] styleable AlertDialog { 0x010100f2, 0x7f01001f, 0x7f010020, 0x7f010021, 0x7f010022, 0x7f010023 }
+int styleable AlertDialog_android_layout 0
+int styleable AlertDialog_buttonPanelSideLayout 1
+int styleable AlertDialog_listItemLayout 5
+int styleable AlertDialog_listLayout 2
+int styleable AlertDialog_multiChoiceItemLayout 3
+int styleable AlertDialog_singleChoiceItemLayout 4
+int[] styleable AppCompatTextView { 0x01010034, 0x7f010024 }
+int styleable AppCompatTextView_android_textAppearance 0
+int styleable AppCompatTextView_textAllCaps 1
+int[] styleable ButtonBarLayout { 0x7f010025 }
+int styleable ButtonBarLayout_allowStacking 0
+int[] styleable CompoundButton { 0x01010107, 0x7f010026, 0x7f010027 }
+int styleable CompoundButton_android_button 0
+int styleable CompoundButton_buttonTint 1
+int styleable CompoundButton_buttonTintMode 2
+int[] styleable DrawerArrowToggle { 0x7f010028, 0x7f010029, 0x7f01002a, 0x7f01002b, 0x7f01002c, 0x7f01002d, 0x7f01002e, 0x7f01002f }
+int styleable DrawerArrowToggle_arrowHeadLength 4
+int styleable DrawerArrowToggle_arrowShaftLength 5
+int styleable DrawerArrowToggle_barLength 6
+int styleable DrawerArrowToggle_color 0
+int styleable DrawerArrowToggle_drawableSize 2
+int styleable DrawerArrowToggle_gapBetweenBars 3
+int styleable DrawerArrowToggle_spinBars 1
+int styleable DrawerArrowToggle_thickness 7
+int[] styleable LinearLayoutCompat { 0x010100af, 0x010100c4, 0x01010126, 0x01010127, 0x01010128, 0x7f01000b, 0x7f010030, 0x7f010031, 0x7f010032 }
+int styleable LinearLayoutCompat_android_baselineAligned 2
+int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 3
+int styleable LinearLayoutCompat_android_gravity 0
+int styleable LinearLayoutCompat_android_orientation 1
+int styleable LinearLayoutCompat_android_weightSum 4
+int styleable LinearLayoutCompat_divider 5
+int styleable LinearLayoutCompat_dividerPadding 8
+int styleable LinearLayoutCompat_measureWithLargestChild 6
+int styleable LinearLayoutCompat_showDividers 7
+int[] styleable LinearLayoutCompat_Layout { 0x010100b3, 0x010100f4, 0x010100f5, 0x01010181 }
+int styleable LinearLayoutCompat_Layout_android_layout_gravity 0
+int styleable LinearLayoutCompat_Layout_android_layout_height 2
+int styleable LinearLayoutCompat_Layout_android_layout_weight 3
+int styleable LinearLayoutCompat_Layout_android_layout_width 1
+int[] styleable ListPopupWindow { 0x010102ac, 0x010102ad }
+int styleable ListPopupWindow_android_dropDownHorizontalOffset 0
+int styleable ListPopupWindow_android_dropDownVerticalOffset 1
int[] styleable MenuGroup { 0x0101000e, 0x010100d0, 0x01010194, 0x010101de, 0x010101df, 0x010101e0 }
int styleable MenuGroup_android_checkableBehavior 5
int styleable MenuGroup_android_enabled 0
int styleable MenuGroup_android_menuCategory 3
int styleable MenuGroup_android_orderInCategory 4
int styleable MenuGroup_android_visible 2
-int[] styleable MenuItem { 0x01010002, 0x0101000e, 0x010100d0, 0x01010106, 0x01010194, 0x010101de, 0x010101df, 0x010101e1, 0x010101e2, 0x010101e3, 0x010101e4, 0x010101e5, 0x0101026f, 0x7f01005c, 0x7f01005d, 0x7f01005e, 0x7f01005f }
+int[] styleable MenuItem { 0x01010002, 0x0101000e, 0x010100d0, 0x01010106, 0x01010194, 0x010101de, 0x010101df, 0x010101e1, 0x010101e2, 0x010101e3, 0x010101e4, 0x010101e5, 0x0101026f, 0x7f010033, 0x7f010034, 0x7f010035, 0x7f010036 }
int styleable MenuItem_actionLayout 14
int styleable MenuItem_actionProviderClass 16
int styleable MenuItem_actionViewClass 15
int styleable MenuItem_android_titleCondensed 8
int styleable MenuItem_android_visible 4
int styleable MenuItem_showAsAction 13
-int[] styleable MenuView { 0x010100ae, 0x0101012c, 0x0101012d, 0x0101012e, 0x0101012f, 0x01010130, 0x01010131, 0x01010435 }
+int[] styleable MenuView { 0x010100ae, 0x0101012c, 0x0101012d, 0x0101012e, 0x0101012f, 0x01010130, 0x01010131, 0x7f010037 }
int styleable MenuView_android_headerBackground 4
int styleable MenuView_android_horizontalDivider 2
int styleable MenuView_android_itemBackground 5
int styleable MenuView_android_itemIconDisabledAlpha 6
int styleable MenuView_android_itemTextAppearance 1
-int styleable MenuView_android_preserveIconSpacing 7
int styleable MenuView_android_verticalDivider 3
int styleable MenuView_android_windowAnimationStyle 0
-int[] styleable SearchView { 0x0101011f, 0x01010220, 0x01010264, 0x7f010060, 0x7f010061 }
-int styleable SearchView_android_imeOptions 2
-int styleable SearchView_android_inputType 1
-int styleable SearchView_android_maxWidth 0
-int styleable SearchView_iconifiedByDefault 3
-int styleable SearchView_queryHint 4
-int[] styleable Spinner { 0x010100af, 0x01010175, 0x01010176, 0x01010262, 0x010102ac, 0x010102ad, 0x7f010062, 0x7f010063, 0x7f010064, 0x7f010065 }
-int styleable Spinner_android_dropDownHorizontalOffset 4
-int styleable Spinner_android_dropDownSelector 1
-int styleable Spinner_android_dropDownVerticalOffset 5
-int styleable Spinner_android_dropDownWidth 3
-int styleable Spinner_android_gravity 0
-int styleable Spinner_android_popupBackground 2
-int styleable Spinner_disableChildrenWhenDisabled 9
-int styleable Spinner_popupPromptView 8
-int styleable Spinner_prompt 6
-int styleable Spinner_spinnerMode 7
-int[] styleable Theme { 0x7f010066, 0x7f010067, 0x7f010068, 0x7f010069, 0x7f01006a, 0x7f01006b }
-int styleable Theme_actionDropDownStyle 0
-int styleable Theme_dropdownListPreferredItemHeight 1
-int styleable Theme_listChoiceBackgroundIndicator 5
-int styleable Theme_panelMenuListTheme 4
-int styleable Theme_panelMenuListWidth 3
-int styleable Theme_popupMenuStyle 2
-int[] styleable View { 0x010100da, 0x7f01006c, 0x7f01006d }
-int styleable View_android_focusable 0
-int styleable View_paddingEnd 2
-int styleable View_paddingStart 1
+int styleable MenuView_preserveIconSpacing 7
+int[] styleable PopupWindow { 0x01010176, 0x7f010038 }
+int styleable PopupWindow_android_popupBackground 0
+int styleable PopupWindow_overlapAnchor 1
+int[] styleable PopupWindowBackgroundState { 0x7f010039 }
+int styleable PopupWindowBackgroundState_state_above_anchor 0
+int[] styleable SearchView { 0x010100da, 0x0101011f, 0x01010220, 0x01010264, 0x7f01003a, 0x7f01003b, 0x7f01003c, 0x7f01003d, 0x7f01003e, 0x7f01003f, 0x7f010040, 0x7f010041, 0x7f010042, 0x7f010043, 0x7f010044, 0x7f010045, 0x7f010046 }
+int styleable SearchView_android_focusable 0
+int styleable SearchView_android_imeOptions 3
+int styleable SearchView_android_inputType 2
+int styleable SearchView_android_maxWidth 1
+int styleable SearchView_closeIcon 8
+int styleable SearchView_commitIcon 13
+int styleable SearchView_defaultQueryHint 7
+int styleable SearchView_goIcon 9
+int styleable SearchView_iconifiedByDefault 5
+int styleable SearchView_layout 4
+int styleable SearchView_queryBackground 15
+int styleable SearchView_queryHint 6
+int styleable SearchView_searchHintIcon 11
+int styleable SearchView_searchIcon 10
+int styleable SearchView_submitBackground 16
+int styleable SearchView_suggestionRowLayout 14
+int styleable SearchView_voiceIcon 12
+int[] styleable Spinner { 0x01010176, 0x0101017b, 0x01010262, 0x7f01001b }
+int styleable Spinner_android_dropDownWidth 2
+int styleable Spinner_android_popupBackground 0
+int styleable Spinner_android_prompt 1
+int styleable Spinner_popupTheme 3
+int[] styleable SwitchCompat { 0x01010124, 0x01010125, 0x01010142, 0x7f010047, 0x7f010048, 0x7f010049, 0x7f01004a, 0x7f01004b, 0x7f01004c, 0x7f01004d }
+int styleable SwitchCompat_android_textOff 1
+int styleable SwitchCompat_android_textOn 0
+int styleable SwitchCompat_android_thumb 2
+int styleable SwitchCompat_showText 9
+int styleable SwitchCompat_splitTrack 8
+int styleable SwitchCompat_switchMinWidth 6
+int styleable SwitchCompat_switchPadding 7
+int styleable SwitchCompat_switchTextAppearance 5
+int styleable SwitchCompat_thumbTextPadding 4
+int styleable SwitchCompat_track 3
+int[] styleable TextAppearance { 0x01010095, 0x01010096, 0x01010097, 0x01010098, 0x01010161, 0x01010162, 0x01010163, 0x01010164, 0x7f010024 }
+int styleable TextAppearance_android_shadowColor 4
+int styleable TextAppearance_android_shadowDx 5
+int styleable TextAppearance_android_shadowDy 6
+int styleable TextAppearance_android_shadowRadius 7
+int styleable TextAppearance_android_textColor 3
+int styleable TextAppearance_android_textSize 0
+int styleable TextAppearance_android_textStyle 2
+int styleable TextAppearance_android_typeface 1
+int styleable TextAppearance_textAllCaps 8
+int[] styleable Theme { 0x01010057, 0x010100ae, 0x7f01004e, 0x7f01004f, 0x7f010050, 0x7f010051, 0x7f010052, 0x7f010053, 0x7f010054, 0x7f010055, 0x7f010056, 0x7f010057, 0x7f010058, 0x7f010059, 0x7f01005a, 0x7f01005b, 0x7f01005c, 0x7f01005d, 0x7f01005e, 0x7f01005f, 0x7f010060, 0x7f010061, 0x7f010062, 0x7f010063, 0x7f010064, 0x7f010065, 0x7f010066, 0x7f010067, 0x7f010068, 0x7f010069, 0x7f01006a, 0x7f01006b, 0x7f01006c, 0x7f01006d, 0x7f01006e, 0x7f01006f, 0x7f010070, 0x7f010071, 0x7f010072, 0x7f010073, 0x7f010074, 0x7f010075, 0x7f010076, 0x7f010077, 0x7f010078, 0x7f010079, 0x7f01007a, 0x7f01007b, 0x7f01007c, 0x7f01007d, 0x7f01007e, 0x7f01007f, 0x7f010080, 0x7f010081, 0x7f010082, 0x7f010083, 0x7f010084, 0x7f010085, 0x7f010086, 0x7f010087, 0x7f010088, 0x7f010089, 0x7f01008a, 0x7f01008b, 0x7f01008c, 0x7f01008d, 0x7f01008e, 0x7f01008f, 0x7f010090, 0x7f010091, 0x7f010092, 0x7f010093, 0x7f010094, 0x7f010095, 0x7f010096, 0x7f010097, 0x7f010098, 0x7f010099, 0x7f01009a, 0x7f01009b, 0x7f01009c, 0x7f01009d, 0x7f01009e, 0x7f01009f, 0x7f0100a0, 0x7f0100a1, 0x7f0100a2, 0x7f0100a3, 0x7f0100a4, 0x7f0100a5, 0x7f0100a6, 0x7f0100a7, 0x7f0100a8, 0x7f0100a9, 0x7f0100aa, 0x7f0100ab, 0x7f0100ac, 0x7f0100ad, 0x7f0100ae, 0x7f0100af, 0x7f0100b0, 0x7f0100b1, 0x7f0100b2, 0x7f0100b3, 0x7f0100b4, 0x7f0100b5, 0x7f0100b6, 0x7f0100b7, 0x7f0100b8, 0x7f0100b9 }
+int styleable Theme_actionBarDivider 23
+int styleable Theme_actionBarItemBackground 24
+int styleable Theme_actionBarPopupTheme 17
+int styleable Theme_actionBarSize 22
+int styleable Theme_actionBarSplitStyle 19
+int styleable Theme_actionBarStyle 18
+int styleable Theme_actionBarTabBarStyle 13
+int styleable Theme_actionBarTabStyle 12
+int styleable Theme_actionBarTabTextStyle 14
+int styleable Theme_actionBarTheme 20
+int styleable Theme_actionBarWidgetTheme 21
+int styleable Theme_actionButtonStyle 49
+int styleable Theme_actionDropDownStyle 45
+int styleable Theme_actionMenuTextAppearance 25
+int styleable Theme_actionMenuTextColor 26
+int styleable Theme_actionModeBackground 29
+int styleable Theme_actionModeCloseButtonStyle 28
+int styleable Theme_actionModeCloseDrawable 31
+int styleable Theme_actionModeCopyDrawable 33
+int styleable Theme_actionModeCutDrawable 32
+int styleable Theme_actionModeFindDrawable 37
+int styleable Theme_actionModePasteDrawable 34
+int styleable Theme_actionModePopupWindowStyle 39
+int styleable Theme_actionModeSelectAllDrawable 35
+int styleable Theme_actionModeShareDrawable 36
+int styleable Theme_actionModeSplitBackground 30
+int styleable Theme_actionModeStyle 27
+int styleable Theme_actionModeWebSearchDrawable 38
+int styleable Theme_actionOverflowButtonStyle 15
+int styleable Theme_actionOverflowMenuStyle 16
+int styleable Theme_activityChooserViewStyle 57
+int styleable Theme_alertDialogButtonGroupStyle 92
+int styleable Theme_alertDialogCenterButtons 93
+int styleable Theme_alertDialogStyle 91
+int styleable Theme_alertDialogTheme 94
+int styleable Theme_android_windowAnimationStyle 1
+int styleable Theme_android_windowIsFloating 0
+int styleable Theme_autoCompleteTextViewStyle 99
+int styleable Theme_borderlessButtonStyle 54
+int styleable Theme_buttonBarButtonStyle 51
+int styleable Theme_buttonBarNegativeButtonStyle 97
+int styleable Theme_buttonBarNeutralButtonStyle 98
+int styleable Theme_buttonBarPositiveButtonStyle 96
+int styleable Theme_buttonBarStyle 50
+int styleable Theme_buttonStyle 100
+int styleable Theme_buttonStyleSmall 101
+int styleable Theme_checkboxStyle 102
+int styleable Theme_checkedTextViewStyle 103
+int styleable Theme_colorAccent 84
+int styleable Theme_colorButtonNormal 88
+int styleable Theme_colorControlActivated 86
+int styleable Theme_colorControlHighlight 87
+int styleable Theme_colorControlNormal 85
+int styleable Theme_colorPrimary 82
+int styleable Theme_colorPrimaryDark 83
+int styleable Theme_colorSwitchThumbNormal 89
+int styleable Theme_controlBackground 90
+int styleable Theme_dialogPreferredPadding 43
+int styleable Theme_dialogTheme 42
+int styleable Theme_dividerHorizontal 56
+int styleable Theme_dividerVertical 55
+int styleable Theme_dropDownListViewStyle 74
+int styleable Theme_dropdownListPreferredItemHeight 46
+int styleable Theme_editTextBackground 63
+int styleable Theme_editTextColor 62
+int styleable Theme_editTextStyle 104
+int styleable Theme_homeAsUpIndicator 48
+int styleable Theme_imageButtonStyle 64
+int styleable Theme_listChoiceBackgroundIndicator 81
+int styleable Theme_listDividerAlertDialog 44
+int styleable Theme_listPopupWindowStyle 75
+int styleable Theme_listPreferredItemHeight 69
+int styleable Theme_listPreferredItemHeightLarge 71
+int styleable Theme_listPreferredItemHeightSmall 70
+int styleable Theme_listPreferredItemPaddingLeft 72
+int styleable Theme_listPreferredItemPaddingRight 73
+int styleable Theme_panelBackground 78
+int styleable Theme_panelMenuListTheme 80
+int styleable Theme_panelMenuListWidth 79
+int styleable Theme_popupMenuStyle 60
+int styleable Theme_popupWindowStyle 61
+int styleable Theme_radioButtonStyle 105
+int styleable Theme_ratingBarStyle 106
+int styleable Theme_searchViewStyle 68
+int styleable Theme_seekBarStyle 107
+int styleable Theme_selectableItemBackground 52
+int styleable Theme_selectableItemBackgroundBorderless 53
+int styleable Theme_spinnerDropDownItemStyle 47
+int styleable Theme_spinnerStyle 108
+int styleable Theme_switchStyle 109
+int styleable Theme_textAppearanceLargePopupMenu 40
+int styleable Theme_textAppearanceListItem 76
+int styleable Theme_textAppearanceListItemSmall 77
+int styleable Theme_textAppearanceSearchResultSubtitle 66
+int styleable Theme_textAppearanceSearchResultTitle 65
+int styleable Theme_textAppearanceSmallPopupMenu 41
+int styleable Theme_textColorAlertDialogListItem 95
+int styleable Theme_textColorSearchUrl 67
+int styleable Theme_toolbarNavigationButtonStyle 59
+int styleable Theme_toolbarStyle 58
+int styleable Theme_windowActionBar 2
+int styleable Theme_windowActionBarOverlay 4
+int styleable Theme_windowActionModeOverlay 5
+int styleable Theme_windowFixedHeightMajor 9
+int styleable Theme_windowFixedHeightMinor 7
+int styleable Theme_windowFixedWidthMajor 6
+int styleable Theme_windowFixedWidthMinor 8
+int styleable Theme_windowMinWidthMajor 10
+int styleable Theme_windowMinWidthMinor 11
+int styleable Theme_windowNoTitle 3
+int[] styleable Toolbar { 0x010100af, 0x01010140, 0x7f010003, 0x7f010006, 0x7f01000a, 0x7f010016, 0x7f010017, 0x7f010018, 0x7f010019, 0x7f01001b, 0x7f0100ba, 0x7f0100bb, 0x7f0100bc, 0x7f0100bd, 0x7f0100be, 0x7f0100bf, 0x7f0100c0, 0x7f0100c1, 0x7f0100c2, 0x7f0100c3, 0x7f0100c4, 0x7f0100c5, 0x7f0100c6, 0x7f0100c7, 0x7f0100c8 }
+int styleable Toolbar_android_gravity 0
+int styleable Toolbar_android_minHeight 1
+int styleable Toolbar_collapseContentDescription 19
+int styleable Toolbar_collapseIcon 18
+int styleable Toolbar_contentInsetEnd 6
+int styleable Toolbar_contentInsetLeft 7
+int styleable Toolbar_contentInsetRight 8
+int styleable Toolbar_contentInsetStart 5
+int styleable Toolbar_logo 4
+int styleable Toolbar_logoDescription 22
+int styleable Toolbar_maxButtonHeight 17
+int styleable Toolbar_navigationContentDescription 21
+int styleable Toolbar_navigationIcon 20
+int styleable Toolbar_popupTheme 9
+int styleable Toolbar_subtitle 3
+int styleable Toolbar_subtitleTextAppearance 11
+int styleable Toolbar_subtitleTextColor 24
+int styleable Toolbar_title 2
+int styleable Toolbar_titleMarginBottom 16
+int styleable Toolbar_titleMarginEnd 14
+int styleable Toolbar_titleMarginStart 13
+int styleable Toolbar_titleMarginTop 15
+int styleable Toolbar_titleMargins 12
+int styleable Toolbar_titleTextAppearance 10
+int styleable Toolbar_titleTextColor 23
+int[] styleable View { 0x01010000, 0x010100da, 0x7f0100c9, 0x7f0100ca, 0x7f0100cb }
+int styleable View_android_focusable 1
+int styleable View_android_theme 0
+int styleable View_paddingEnd 3
+int styleable View_paddingStart 2
+int styleable View_theme 4
+int[] styleable ViewBackgroundHelper { 0x010100d4, 0x7f0100cc, 0x7f0100cd }
+int styleable ViewBackgroundHelper_android_background 0
+int styleable ViewBackgroundHelper_backgroundTint 1
+int styleable ViewBackgroundHelper_backgroundTintMode 2
+int[] styleable ViewStubCompat { 0x010100d0, 0x010100f2, 0x010100f3 }
+int styleable ViewStubCompat_android_id 0
+int styleable ViewStubCompat_android_inflatedId 2
+int styleable ViewStubCompat_android_layout 1
--- /dev/null
+Library Project including compatibility ActionBar.
+
+This can be used by an Android project to provide
+access to ActionBar on applications running on API 7+.
+
+There is technically no source, but the src folder is necessary
+to ensure that the build system works. The content is actually
+located in libs/android-support-v7-appcompat.jar.
+The accompanying resources must also be included in the application.
+
+++ /dev/null
-# Ignore everything in this directory
-*
-# Except this file
-!.gitignore
\ No newline at end of file
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
-target=android-16
+target=android-23
android.library=true
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
- android:duration="@android:integer/config_mediumAnimTime" /><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/anim/abc_fade_in.xml -->
\ No newline at end of file
+ android:duration="@android:integer/config_mediumAnimTime" /><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_fade_in.xml -->
\ No newline at end of file
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
- android:duration="@android:integer/config_mediumAnimTime" /><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/anim/abc_fade_out.xml -->
\ No newline at end of file
+ android:duration="@android:integer/config_mediumAnimTime" /><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_fade_out.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/res/anim/fade_in.xml
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">
+ <scale android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromXScale="0.9" android:toXScale="1.0"
+ android:fromYScale="0.9" android:toYScale="1.0"
+ android:pivotX="50%" android:pivotY="100%"
+ android:duration="@integer/abc_config_activityDefaultDur" />
+ <alpha android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@integer/abc_config_activityShortDur" />
+</set><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_grow_fade_in_from_bottom.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shareInterpolator="false" >
+ <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:duration="@integer/abc_config_activityShortDur" />
+</set><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_popup_enter.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shareInterpolator="false" >
+ <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:duration="@integer/abc_config_activityShortDur" />
+</set><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_popup_exit.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2014 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">
+ <scale android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromXScale="1.0" android:toXScale="0.9"
+ android:fromYScale="1.0" android:toYScale="0.9"
+ android:pivotX="50%" android:pivotY="100%"
+ android:duration="@integer/abc_config_activityDefaultDur" />
+ <alpha android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@integer/abc_config_activityShortDur" />
+</set><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_shrink_fade_out_from_bottom.xml -->
\ No newline at end of file
android:interpolator="@android:anim/decelerate_interpolator"
android:fromYDelta="50%p" android:toYDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/anim/abc_slide_in_bottom.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_slide_in_bottom.xml -->
\ No newline at end of file
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromYDelta="-50%p" android:toYDelta="0"
- android:duration="@android:integer/config_mediumAnimTime"/><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/anim/abc_slide_in_top.xml -->
\ No newline at end of file
+ android:duration="@android:integer/config_mediumAnimTime"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_slide_in_top.xml -->
\ No newline at end of file
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromYDelta="0" android:toYDelta="50%p"
- android:duration="@android:integer/config_mediumAnimTime"/><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/anim/abc_slide_out_bottom.xml -->
\ No newline at end of file
+ android:duration="@android:integer/config_mediumAnimTime"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_slide_out_bottom.xml -->
\ No newline at end of file
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromYDelta="0" android:toYDelta="-50%p"
- android:duration="@android:integer/config_mediumAnimTime"/><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/anim/abc_slide_out_top.xml -->
\ No newline at end of file
+ android:duration="@android:integer/config_mediumAnimTime"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/anim/abc_slide_out_top.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_accelerated="false" android:color="@color/background_material_dark" />
+ <item android:color="@android:color/transparent" />
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color-v11/abc_background_cache_hint_selector_material_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_accelerated="false" android:color="@color/background_material_light" />
+ <item android:color="@android:color/transparent" />
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color-v11/abc_background_cache_hint_selector_material_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true"
+ android:state_enabled="true"
+ android:alpha="@dimen/highlight_alpha_material_colored"
+ android:color="?android:attr/colorControlActivated" />
+ <item android:color="?android:attr/colorControlHighlight" />
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color-v23/abc_color_highlight_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@color/background_material_dark" />
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_background_cache_hint_selector_material_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@color/background_material_light" />
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_background_cache_hint_selector_material_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/bright_foreground_disabled_material_dark"/>
+ <item android:color="@color/bright_foreground_material_dark"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_primary_text_disable_only_material_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/bright_foreground_disabled_material_light"/>
+ <item android:color="@color/bright_foreground_material_light"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_primary_text_disable_only_material_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
+ <item android:color="@color/primary_text_default_material_dark"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_primary_text_material_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_light"/>
+ <item android:color="@color/primary_text_default_material_light"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_primary_text_material_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true" android:color="@color/abc_search_url_text_pressed"/>
+ <item android:state_selected="true" android:color="@color/abc_search_url_text_selected"/>
+ <item android:color="@color/abc_search_url_text_normal"/>
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_search_url_text.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true" android:color="@color/abc_search_url_text_pressed"/>
- <item android:state_selected="true" android:color="@color/abc_search_url_text_selected"/>
- <item android:color="@color/abc_search_url_text_normal"/> <!-- not selected -->
-</selector><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/color/abc_search_url_text_holo.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/secondary_text_disabled_material_dark"/>
+ <item android:color="@color/secondary_text_default_material_dark"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_secondary_text_material_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/secondary_text_disabled_material_light"/>
+ <item android:color="@color/secondary_text_default_material_light"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/abc_secondary_text_material_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/switch_thumb_disabled_material_dark"/>
+ <item android:color="@color/switch_thumb_normal_material_dark"/>
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/switch_thumb_material_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/switch_thumb_disabled_material_light"/>
+ <item android:color="@color/switch_thumb_normal_material_light"/>
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/color/switch_thumb_material_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable-v21/abc_action_bar_item_background_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="@dimen/abc_button_inset_horizontal_material"
+ android:insetTop="@dimen/abc_button_inset_vertical_material"
+ android:insetRight="@dimen/abc_button_inset_horizontal_material"
+ android:insetBottom="@dimen/abc_button_inset_vertical_material">
+ <ripple android:color="?android:attr/colorControlHighlight">
+ <item>
+ <!-- As we can't use themed ColorStateLists in L, we'll use a Drawable selector which
+ changes the shape's fill color. -->
+ <selector>
+ <item android:state_enabled="false">
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/abc_control_corner_material"/>
+ <solid android:color="?android:attr/colorButtonNormal"/>
+ <padding android:left="@dimen/abc_button_padding_horizontal_material"
+ android:top="@dimen/abc_button_padding_vertical_material"
+ android:right="@dimen/abc_button_padding_horizontal_material"
+ android:bottom="@dimen/abc_button_padding_vertical_material"/>
+ </shape>
+ </item>
+ <item>
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/abc_control_corner_material"/>
+ <solid android:color="?android:attr/colorAccent"/>
+ <padding android:left="@dimen/abc_button_padding_horizontal_material"
+ android:top="@dimen/abc_button_padding_vertical_material"
+ android:right="@dimen/abc_button_padding_horizontal_material"
+ android:bottom="@dimen/abc_button_padding_vertical_material"/>
+ </shape>
+ </item>
+ </selector>
+ </item>
+ </ripple>
+</inset><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable-v21/abc_btn_colored_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/abc_color_highlight_material"
+ android:radius="20dp" /><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable-v23/abc_control_background_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_focused="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
+ <item android:state_pressed="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
+ <item android:drawable="@android:color/transparent"/>
+</selector>
+
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_btn_borderless_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" />
+ <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" />
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_btn_check_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Used as the canonical button shape. -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/abc_btn_default_mtrl_shape" />
+</layer-list>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_btn_colored_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Used as the canonical button shape. -->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="@dimen/abc_button_inset_horizontal_material"
+ android:insetTop="@dimen/abc_button_inset_vertical_material"
+ android:insetRight="@dimen/abc_button_inset_horizontal_material"
+ android:insetBottom="@dimen/abc_button_inset_vertical_material">
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/abc_control_corner_material" />
+ <solid android:color="@android:color/white" />
+ <padding android:left="@dimen/abc_button_padding_horizontal_material"
+ android:top="@dimen/abc_button_padding_vertical_material"
+ android:right="@dimen/abc_button_padding_horizontal_material"
+ android:bottom="@dimen/abc_button_padding_vertical_material" />
+ </shape>
+</inset>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_btn_default_mtrl_shape.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:drawable="@drawable/abc_btn_radio_to_on_mtrl_015" />
+ <item android:drawable="@drawable/abc_btn_radio_to_on_mtrl_000" />
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_btn_radio_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ A solid rectangle so that we can use a PorterDuff multiply color filter to tint this
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="@android:color/white" />
+</shape><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_cab_background_internal_bg.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- This is a dummy drawable so that we can refer to the drawable ID -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@android:color/white"/>
+</shape>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_cab_background_top_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="16dp"
+ android:insetTop="16dp"
+ android:insetRight="16dp"
+ android:insetBottom="16dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="2dp" />
+ <solid android:color="@color/background_floating_material_dark" />
+ </shape>
+</inset><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_dialog_material_background_dark.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="16dp"
+ android:insetTop="16dp"
+ android:insetRight="16dp"
+ android:insetBottom="16dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="2dp" />
+ <solid android:color="@color/background_floating_material_light" />
+ </shape>
+</inset><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_dialog_material_background_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
+ android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
+ android:insetTop="@dimen/abc_edit_text_inset_top_material"
+ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
+
+ <selector>
+ <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
+ <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
+ <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
+ </selector>
+
+</inset>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_edit_text_material.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false"
- android:drawable="@drawable/abc_ic_clear_disabled" />
- <item
- android:drawable="@drawable/abc_ic_clear_normal" />
-</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_ic_clear.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false"
- android:drawable="@drawable/abc_ic_clear_search_api_disabled_holo_light" />
- <item
- android:drawable="@drawable/abc_ic_clear_search_api_holo_light" />
-</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_ic_clear_holo_light.xml -->
\ No newline at end of file
<item android:state_focused="true" android:drawable="@drawable/abc_list_focused_holo" />
<item android:drawable="@android:color/transparent" />
</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_item_background_holo_dark.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_item_background_holo_dark.xml -->
\ No newline at end of file
<item android:state_focused="true" android:drawable="@drawable/abc_list_focused_holo" />
<item android:drawable="@android:color/transparent" />
</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_item_background_holo_light.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_item_background_holo_light.xml -->
\ No newline at end of file
<item android:drawable="@drawable/abc_list_pressed_holo_dark" />
<item android:drawable="@drawable/abc_list_longpressed_holo" />
</transition>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_background_transition_holo_dark.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_background_transition_holo_dark.xml -->
\ No newline at end of file
<item android:drawable="@drawable/abc_list_pressed_holo_light" />
<item android:drawable="@drawable/abc_list_longpressed_holo" />
</transition>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_background_transition_holo_light.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_background_transition_holo_light.xml -->
\ No newline at end of file
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/abc_list_selector_background_transition_holo_dark" />
<item android:state_focused="true" android:drawable="@drawable/abc_list_focused_holo" />
</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_holo_dark.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_holo_dark.xml -->
\ No newline at end of file
<item android:state_focused="true" android:drawable="@drawable/abc_list_focused_holo" />
</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_holo_light.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_list_selector_holo_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@android:id/background"
+ android:drawable="@drawable/abc_btn_rating_star_off_mtrl_alpha" />
+ <item android:id="@android:id/secondaryProgress"
+ android:drawable="@drawable/abc_btn_rating_star_off_mtrl_alpha" />
+ <item android:id="@android:id/progress"
+ android:drawable="@drawable/abc_btn_rating_star_on_mtrl_alpha" />
+</layer-list>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_ratingbar_full_material.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="#F0A0A0A0"/>
- <stroke android:width="2dp" color="#A00080FF"/>
- <padding android:left="5dp" android:top="0dp"
- android:right="5dp" android:bottom="1dp" />
-</shape>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_search_dropdown_dark.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="#F0FFFFFF"/>
- <stroke android:width="1dp" color="#A00080FF"/>
- <padding android:left="5dp" android:top="0dp"
- android:right="5dp" android:bottom="1dp" />
-</shape>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_search_dropdown_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:constantSize="true">
+ <item android:state_enabled="false" android:state_pressed="true">
+ <bitmap android:src="@drawable/abc_scrubber_control_off_mtrl_alpha"
+ android:gravity="center"/>
+ </item>
+ <item android:state_enabled="false">
+ <bitmap android:src="@drawable/abc_scrubber_control_off_mtrl_alpha"
+ android:gravity="center"/>
+ </item>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/abc_scrubber_control_to_pressed_mtrl_005"
+ android:gravity="center"/>
+ </item>
+ <item>
+ <bitmap android:src="@drawable/abc_scrubber_control_to_pressed_mtrl_000"
+ android:gravity="center"/>
+ </item>
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_seekbar_thumb_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@android:id/background"
+ android:drawable="@drawable/abc_scrubber_track_mtrl_alpha"/>
+ <item android:id="@android:id/secondaryProgress">
+ <scale android:scaleWidth="100%">
+ <selector>
+ <item android:state_enabled="false">
+ <color android:color="@android:color/transparent"/>
+ </item>
+ <item android:drawable="@drawable/abc_scrubber_primary_mtrl_alpha"/>
+ </selector>
+ </scale>
+ </item>
+ <item android:id="@android:id/progress">
+ <scale android:scaleWidth="100%">
+ <selector>
+ <item android:state_enabled="false">
+ <color android:color="@android:color/transparent"/>
+ </item>
+ <item android:drawable="@drawable/abc_scrubber_primary_mtrl_alpha"/>
+ </selector>
+ </scale>
+ </item>
+</layer-list><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_seekbar_track_material.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false"
- android:drawable="@drawable/abc_spinner_ab_disabled_holo_dark" />
- <item android:state_pressed="true"
- android:drawable="@drawable/abc_spinner_ab_pressed_holo_dark" />
- <item android:state_pressed="false" android:state_focused="true"
- android:drawable="@drawable/abc_spinner_ab_focused_holo_dark" />
- <item android:drawable="@drawable/abc_spinner_ab_default_holo_dark" />
-</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_spinner_ab_holo_dark.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false"
- android:drawable="@drawable/abc_spinner_ab_disabled_holo_light" />
- <item android:state_pressed="true"
- android:drawable="@drawable/abc_spinner_ab_pressed_holo_light" />
- <item android:state_pressed="false" android:state_focused="true"
- android:drawable="@drawable/abc_spinner_ab_focused_holo_light" />
- <item android:drawable="@drawable/abc_spinner_ab_default_holo_light" />
-</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_spinner_ab_holo_light.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="@dimen/abc_control_inset_material"
+ android:insetTop="@dimen/abc_control_inset_material"
+ android:insetBottom="@dimen/abc_control_inset_material"
+ android:insetRight="@dimen/abc_control_inset_material">
+ <selector>
+ <item android:state_checked="false" android:state_pressed="false">
+ <layer-list>
+ <item android:drawable="@drawable/abc_textfield_default_mtrl_alpha" />
+ <item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" />
+ </layer-list>
+ </item>
+ <item>
+ <layer-list>
+ <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha" />
+ <item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" />
+ </layer-list>
+ </item>
+ </selector>
+</inset><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_spinner_textfield_background_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:drawable="@drawable/abc_btn_switch_to_on_mtrl_00012" />
+ <item android:drawable="@drawable/abc_btn_switch_to_on_mtrl_00001" />
+</selector><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_switch_thumb_material.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Non focused states -->
- <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
- <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abc_tab_selected_holo" />
-
- <!-- Focused states -->
- <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abc_list_focused_holo" />
- <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abc_tab_selected_focused_holo" />
-
- <!-- Pressed -->
- <!-- Non focused states -->
- <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abc_list_pressed_holo_dark" />
- <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abc_tab_selected_pressed_holo" />
-
- <!-- Focused states -->
- <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abc_tab_unselected_pressed_holo" />
- <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abc_tab_selected_pressed_holo" />
-</selector>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_tab_indicator_ab_holo.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_selected="true" android:drawable="@drawable/abc_tab_indicator_mtrl_alpha" />
+ <item android:drawable="@android:color/transparent" />
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_tab_indicator_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <size android:height="2dp"
+ android:width="2dp"/>
+ <solid android:color="@android:color/white"/>
+</shape><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_text_cursor_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/abc_textfield_search_activated_mtrl_alpha"/>
+ <item android:state_enabled="true" android:state_activated="true" android:drawable="@drawable/abc_textfield_search_activated_mtrl_alpha"/>
+ <item android:state_enabled="true" android:drawable="@drawable/abc_textfield_search_default_mtrl_alpha"/>
+ <item android:drawable="@drawable/abc_textfield_search_default_mtrl_alpha"/>
+</selector>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/drawable/abc_textfield_search_material.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true"
- android:drawable="@drawable/abc_textfield_search_selected_holo_dark" />
- <item android:drawable="@drawable/abc_textfield_search_default_holo_dark" />
-</selector>
-
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_textfield_searchview_holo_dark.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true"
- android:drawable="@drawable/abc_textfield_search_selected_holo_light" />
- <item android:drawable="@drawable/abc_textfield_search_default_holo_light" />
-</selector>
-
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_textfield_searchview_holo_light.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true"
- android:drawable="@drawable/abc_textfield_search_right_selected_holo_dark" />
- <item android:drawable="@drawable/abc_textfield_search_right_default_holo_dark" />
-</selector>
-
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_textfield_searchview_right_holo_dark.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true"
- android:drawable="@drawable/abc_textfield_search_right_selected_holo_light" />
- <item android:drawable="@drawable/abc_textfield_search_right_default_holo_light" />
-</selector>
-
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/drawable/abc_textfield_searchview_right_holo_light.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<android.support.v7.internal.widget.NativeActionModeAwareLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/action_bar_root"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:fitsSystemWindows="true">
-
- <include layout="@layout/abc_action_bar_decor_include" />
-
-</android.support.v7.internal.widget.NativeActionModeAwareLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout-v11/abc_action_bar_decor.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<android.support.v7.internal.widget.NativeActionModeAwareLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/action_bar_root"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:fitsSystemWindows="true">
-
- <FrameLayout
- android:id="@id/action_bar_activity_content"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:foreground="?android:attr/windowContentOverlay"/>
-
-</android.support.v7.internal.widget.NativeActionModeAwareLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout-v11/abc_simple_decor.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/activity_chooser_view_content"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- style="?attr/activityChooserViewStyle">
-
- <include layout="@layout/abc_activity_chooser_view_include" />
-
-</LinearLayout><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout-v14/abc_activity_chooser_view.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:fitsSystemWindows="true">
-
- <include layout="@layout/abc_action_bar_decor_include" />
-
-</LinearLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_decor.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
- <android.support.v7.internal.widget.ActionBarContainer
- android:id="@+id/action_bar_container"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- style="?attr/actionBarStyle">
-
- <android.support.v7.internal.widget.ActionBarView
- android:id="@+id/action_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- style="?attr/actionBarStyle" />
-
- <android.support.v7.internal.widget.ActionBarContextView
- android:id="@+id/action_context_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- style="?attr/actionModeStyle" />
- </android.support.v7.internal.widget.ActionBarContainer>
-
- <FrameLayout
- android:id="@id/action_bar_activity_content"
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:foregroundGravity="fill_horizontal|top"
- android:foreground="?android:attr/windowContentOverlay" />
-
- <android.support.v7.internal.widget.ActionBarContainer
- android:id="@+id/split_action_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- style="?attr/actionBarSplitStyle"
- android:visibility="gone"
- android:gravity="center" />
-
-</merge>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_decor_include.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<android.support.v7.internal.widget.ActionBarOverlayLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/action_bar_overlay_layout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <FrameLayout android:id="@id/action_bar_activity_content"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- <LinearLayout android:id="@+id/top_action_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="top">
- <android.support.v7.internal.widget.ActionBarContainer android:id="@+id/action_bar_container"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- style="?attr/actionBarStyle"
- android:gravity="top">
- <android.support.v7.internal.widget.ActionBarView
- android:id="@+id/action_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- style="?attr/actionBarStyle"/>
- <android.support.v7.internal.widget.ActionBarContextView
- android:id="@+id/action_context_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- style="?attr/actionModeStyle"/>
- </android.support.v7.internal.widget.ActionBarContainer>
- <ImageView android:src="?android:attr/windowContentOverlay"
- android:scaleType="fitXY"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- <android.support.v7.internal.widget.ActionBarContainer android:id="@+id/split_action_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- style="?attr/actionBarSplitStyle"
- android:visibility="gone"
- android:gravity="center"/>
-</android.support.v7.internal.widget.ActionBarOverlayLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_decor_overlay.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<view xmlns:android="http://schemas.android.com/apk/res/android"
- class="android.support.v7.internal.widget.ActionBarView$HomeView"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:background="?attr/actionBarItemBackground">
- <ImageView android:id="@+id/up"
- android:src="?attr/homeAsUpIndicator"
- android:layout_gravity="center_vertical|left"
- android:visibility="gone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="-8dip"/>
- <ImageView android:id="@id/home"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="8dip"
- android:layout_marginTop="@dimen/abc_action_bar_icon_vertical_padding"
- android:layout_marginBottom="@dimen/abc_action_bar_icon_vertical_padding"
- android:layout_gravity="center"
- android:adjustViewBounds="true"
- android:scaleType="fitCenter"/>
-</view>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_home.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-
-<view xmlns:android="http://schemas.android.com/apk/res/android"
- class="android.support.v7.internal.widget.ScrollingTabContainerView$TabView"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- style="?attr/actionBarTabStyle"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_tab.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-
-<android.support.v7.internal.widget.LinearLayoutICS
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="center"
- style="?attr/actionBarTabBarStyle"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_tabbar.xml -->
\ No newline at end of file
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingRight="8dip"
- android:background="?attr/actionBarItemBackground"
- android:enabled="false">
-
- <ImageView android:id="@+id/up"
- android:src="?attr/homeAsUpIndicator"
- android:layout_gravity="center_vertical|left"
- android:visibility="gone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
-
- <LinearLayout android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|left"
- android:orientation="vertical">
- <TextView android:id="@+id/action_bar_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"/>
- <TextView android:id="@+id/action_bar_subtitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/abc_action_bar_subtitle_top_margin"
- android:layout_marginBottom="@dimen/abc_action_bar_subtitle_bottom_margin"
- android:singleLine="true"
- android:ellipsize="end"
- android:visibility="gone"/>
- </LinearLayout>
+ android:orientation="vertical"
+ style="@style/RtlOverlay.Widget.AppCompat.ActionBar.TitleItem">
+ <TextView android:id="@+id/action_bar_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="end" />
+ <TextView android:id="@+id/action_bar_subtitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/abc_action_bar_subtitle_top_margin_material"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:visibility="gone" />
</LinearLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_title_item.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_bar_title_item.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:background="?attr/actionBarItemBackground"
+ android:gravity="center_vertical"
+ android:enabled="false">
+</LinearLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_bar_up_container.xml -->
\ No newline at end of file
android:layout_width="fill_parent"
android:layout_height="fill_parent"
style="?attr/actionBarTabBarStyle">
-</LinearLayout><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_bar_view_list_nav_layout.xml -->
\ No newline at end of file
+</LinearLayout><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_bar_view_list_nav_layout.xml -->
\ No newline at end of file
limitations under the License.
-->
-<android.support.v7.internal.view.menu.ActionMenuItemView
+<android.support.v7.view.menu.ActionMenuItemView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?attr/actionMenuTextAppearance"
android:textColor="?attr/actionMenuTextColor"
style="?attr/actionButtonStyle"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_menu_item_layout.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_menu_item_layout.xml -->
\ No newline at end of file
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
limitations under the License.
-->
-<android.support.v7.internal.view.menu.ActionMenuView
+<android.support.v7.widget.ActionMenuView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
app:divider="?attr/actionBarDivider"
app:dividerPadding="12dip"
android:gravity="center_vertical"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_menu_layout.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_menu_layout.xml -->
\ No newline at end of file
** limitations under the License.
*/
-->
-<android.support.v7.internal.widget.ActionBarContextView
+<android.support.v7.widget.ActionBarContextView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
+ android:theme="?attr/actionBarTheme"
style="?attr/actionModeStyle"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_mode_bar.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_mode_bar.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/action_mode_close_button"
- android:focusable="true"
- android:clickable="true"
- android:paddingLeft="8dip"
- android:contentDescription="@string/abc_action_mode_done"
- style="?attr/actionModeCloseButtonStyle"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_marginRight="16dip">
- <ImageView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:scaleType="fitCenter"
- android:src="?attr/actionModeCloseDrawable"/>
-</LinearLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_action_mode_close_item.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ImageView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/action_mode_close_button"
+ android:contentDescription="@string/abc_action_mode_done"
+ android:focusable="true"
+ android:clickable="true"
+ android:src="?attr/actionModeCloseDrawable"
+ style="?attr/actionModeCloseButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_action_mode_close_item_material.xml -->
\ No newline at end of file
** limitations under the License.
*/
-->
-<android.support.v7.internal.widget.LinearLayoutICS
- xmlns:android="http://schemas.android.com/apk/res/android"
+<view xmlns:android="http://schemas.android.com/apk/res/android"
+ class="android.support.v7.widget.ActivityChooserView$InnerLayout"
android:id="@+id/activity_chooser_view_content"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
style="?attr/activityChooserViewStyle">
- <include layout="@layout/abc_activity_chooser_view_include" />
+ <FrameLayout
+ android:id="@+id/expand_activities_button"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:focusable="true"
+ android:addStatesFromChildren="true"
+ android:background="?attr/actionBarItemBackground">
-</android.support.v7.internal.widget.LinearLayoutICS><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_activity_chooser_view.xml -->
\ No newline at end of file
+ <ImageView android:id="@+id/image"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_gravity="center"
+ android:layout_marginTop="2dip"
+ android:layout_marginBottom="2dip"
+ android:layout_marginLeft="12dip"
+ android:layout_marginRight="12dip"
+ android:scaleType="fitCenter"
+ android:adjustViewBounds="true" />
+
+ </FrameLayout>
+
+ <FrameLayout
+ android:id="@+id/default_activity_button"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:focusable="true"
+ android:addStatesFromChildren="true"
+ android:background="?attr/actionBarItemBackground">
+
+ <ImageView android:id="@+id/image"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_gravity="center"
+ android:layout_marginTop="2dip"
+ android:layout_marginBottom="2dip"
+ android:layout_marginLeft="12dip"
+ android:layout_marginRight="12dip"
+ android:scaleType="fitCenter"
+ android:adjustViewBounds="true" />
+
+ </FrameLayout>
+
+</view>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_activity_chooser_view.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<merge
- xmlns:android="http://schemas.android.com/apk/res/android">
-
- <FrameLayout
- android:id="@+id/expand_activities_button"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:focusable="true"
- android:addStatesFromChildren="true"
- android:background="?attr/actionBarItemBackground">
-
- <ImageView
- android:id="@+id/image"
- android:layout_width="56dip"
- android:layout_height="36dip"
- android:layout_gravity="center"
- android:paddingTop="2dip"
- android:paddingBottom="2dip"
- android:paddingLeft="12dip"
- android:paddingRight="12dip"
- android:scaleType="fitCenter"
- android:adjustViewBounds="true" />
-
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/default_activity_button"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:focusable="true"
- android:addStatesFromChildren="true"
- android:background="?attr/actionBarItemBackground">
-
- <ImageView
- android:id="@+id/image"
- android:layout_width="56dip"
- android:layout_height="36dip"
- android:layout_gravity="center"
- android:paddingTop="2dip"
- android:paddingBottom="2dip"
- android:paddingLeft="12dip"
- android:paddingRight="12dip"
- android:scaleType="fitCenter"
- android:adjustViewBounds="true" />
-
- </FrameLayout>
-
-</merge><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_activity_chooser_view_include.xml -->
\ No newline at end of file
</LinearLayout>
-</LinearLayout><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_activity_chooser_view_list_item.xml -->
\ No newline at end of file
+</LinearLayout><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_activity_chooser_view_list_item.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<android.support.v7.widget.ButtonBarLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/buttonPanel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layoutDirection="locale"
+ android:orientation="horizontal"
+ android:paddingLeft="12dp"
+ android:paddingRight="12dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
+ android:gravity="bottom"
+ app:allowStacking="@bool/abc_allow_stacked_button_bar"
+ style="?attr/buttonBarStyle">
+
+ <Button
+ android:id="@android:id/button3"
+ style="?attr/buttonBarNeutralButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <android.support.v4.widget.Space
+ android:id="@+id/spacer"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:visibility="invisible" />
+
+ <Button
+ android:id="@android:id/button2"
+ style="?attr/buttonBarNegativeButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <Button
+ android:id="@android:id/button1"
+ style="?attr/buttonBarPositiveButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</android.support.v7.widget.ButtonBarLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_alert_dialog_button_bar_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/parentPanel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:id="@+id/topPanel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:id="@+id/title_template"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingLeft="?attr/dialogPreferredPadding"
+ android:paddingRight="?attr/dialogPreferredPadding"
+ android:paddingTop="@dimen/abc_dialog_padding_top_material">
+
+ <ImageView
+ android:id="@android:id/icon"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:scaleType="fitCenter"
+ android:src="@null"
+ style="@style/RtlOverlay.Widget.AppCompat.DialogTitle.Icon"/>
+
+ <android.support.v7.widget.DialogTitle
+ android:id="@+id/alertTitle"
+ style="?attr/android:windowTitleStyle"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAlignment="viewStart" />
+
+ </LinearLayout>
+ <!-- If the client uses a customTitle, it will be added here. -->
+ </LinearLayout>
+
+ <FrameLayout
+ android:id="@+id/contentPanel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:minHeight="48dp">
+
+ <View android:id="@+id/scrollIndicatorUp"
+ android:visibility="gone"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_gravity="top"
+ android:background="?attr/colorControlHighlight"/>
+
+ <android.support.v4.widget.NestedScrollView
+ android:id="@+id/scrollView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@android:id/message"
+ style="@style/TextAppearance.AppCompat.Subhead"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="?attr/dialogPreferredPadding"
+ android:paddingTop="@dimen/abc_dialog_padding_top_material"
+ android:paddingRight="?attr/dialogPreferredPadding"/>
+
+ <View
+ android:id="@+id/textSpacerNoButtons"
+ android:visibility="gone"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/abc_dialog_padding_top_material"/>
+ </LinearLayout>
+ </android.support.v4.widget.NestedScrollView>
+
+ <View android:id="@+id/scrollIndicatorDown"
+ android:visibility="gone"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_gravity="bottom"
+ android:background="?attr/colorControlHighlight"/>
+
+ </FrameLayout>
+
+ <FrameLayout
+ android:id="@+id/customPanel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:minHeight="48dp">
+
+ <FrameLayout
+ android:id="@+id/custom"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+ </FrameLayout>
+
+ <include layout="@layout/abc_alert_dialog_button_bar_material" />
+
+</LinearLayout><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_alert_dialog_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+This is an optimized layout for a screen, with the minimum set of features
+enabled.
+-->
+
+<android.support.v7.widget.FitWindowsLinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:fitsSystemWindows="true">
+
+ <TextView
+ android:id="@+id/title"
+ style="?android:attr/windowTitleStyle"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAlignment="viewStart"
+ android:paddingLeft="?attr/dialogPreferredPadding"
+ android:paddingRight="?attr/dialogPreferredPadding"
+ android:paddingTop="@dimen/abc_dialog_padding_top_material"/>
+
+ <include
+ layout="@layout/abc_screen_content_include"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+
+</android.support.v7.widget.FitWindowsLinearLayout><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_dialog_title_material.xml -->
\ No newline at end of file
limitations under the License.
-->
-<android.support.v7.internal.view.menu.ExpandedMenuView
+<android.support.v7.view.menu.ExpandedMenuView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/expanded_menu"
android:layout_width="?attr/panelMenuListWidth"
- android:layout_height="wrap_content"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_expanded_menu_layout.xml -->
\ No newline at end of file
+ android:layout_height="wrap_content" />
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_expanded_menu_layout.xml -->
\ No newline at end of file
android:duplicateParentState="true"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_checkbox.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_checkbox.xml -->
\ No newline at end of file
android:scaleType="centerInside"
android:duplicateParentState="true"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_icon.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_icon.xml -->
\ No newline at end of file
limitations under the License.
-->
-<android.support.v7.internal.view.menu.ListMenuItemView
+<android.support.v7.view.menu.ListMenuItemView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/listPreferredItemHeightSmall">
<RelativeLayout
android:layout_width="0dip"
android:layout_weight="1"
- android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
- android:layout_marginRight="?attr/listPreferredItemPaddingRight"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
+ android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
+ android:layout_marginRight="?attr/listPreferredItemPaddingRight"
android:duplicateParentState="true">
<TextView
- android:id="@+id/title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:textAppearance="?attr/textAppearanceListItemSmall"
- android:singleLine="true"
- android:duplicateParentState="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal" />
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentLeft="true"
+ android:textAppearance="?attr/textAppearanceListItemSmall"
+ android:singleLine="true"
+ android:duplicateParentState="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
<TextView
- android:id="@+id/shortcut"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/title"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:singleLine="true"
- android:duplicateParentState="true" />
+ android:id="@+id/shortcut"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/title"
+ android:layout_alignParentLeft="true"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:singleLine="true"
+ android:duplicateParentState="true" />
</RelativeLayout>
<!-- Checkbox, and/or radio button will be inserted here. -->
-</android.support.v7.internal.view.menu.ListMenuItemView>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_layout.xml -->
\ No newline at end of file
+</android.support.v7.view.menu.ListMenuItemView>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_layout.xml -->
\ No newline at end of file
android:focusable="false"
android:clickable="false"
android:duplicateParentState="true"/>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_radio.xml -->
\ No newline at end of file
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_list_menu_item_radio.xml -->
\ No newline at end of file
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
limitations under the License.
-->
-<android.support.v7.internal.view.menu.ListMenuItemView
+<android.support.v7.view.menu.ListMenuItemView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:minWidth="196dip"
- android:paddingRight="16dip">
+ style="@style/RtlOverlay.Widget.AppCompat.PopupMenuItem">
<!-- Icon will be inserted here. -->
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="16dip"
- android:duplicateParentState="true">
+ android:duplicateParentState="true"
+ style="@style/RtlOverlay.Widget.AppCompat.PopupMenuItem.InternalGroup">
<TextView
android:id="@+id/title"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
android:textAppearance="?attr/textAppearanceLargePopupMenu"
android:singleLine="true"
android:duplicateParentState="true"
android:ellipsize="marquee"
- android:fadingEdge="horizontal"/>
+ android:fadingEdge="horizontal"
+ style="@style/RtlOverlay.Widget.AppCompat.PopupMenuItem.Text" />
<TextView
android:id="@+id/shortcut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/title"
- android:layout_alignParentLeft="true"
android:textAppearance="?attr/textAppearanceSmallPopupMenu"
android:singleLine="true"
- android:duplicateParentState="true"/>
+ android:duplicateParentState="true"
+ style="@style/RtlOverlay.Widget.AppCompat.PopupMenuItem.Text" />
</RelativeLayout>
<!-- Checkbox, and/or radio button will be inserted here. -->
-</android.support.v7.internal.view.menu.ListMenuItemView>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_popup_menu_item_layout.xml -->
\ No newline at end of file
+</android.support.v7.view.menu.ListMenuItemView>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_popup_menu_item_layout.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <android.support.v7.widget.ContentFrameLayout
+ android:id="@id/action_bar_activity_content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:foregroundGravity="fill_horizontal|top"
+ android:foreground="?android:attr/windowContentOverlay" />
+
+</merge>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_screen_content_include.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<android.support.v7.widget.FitWindowsLinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/action_bar_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:fitsSystemWindows="true">
+
+ <android.support.v7.widget.ViewStubCompat
+ android:id="@+id/action_mode_bar_stub"
+ android:inflatedId="@+id/action_mode_bar"
+ android:layout="@layout/abc_action_mode_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <include layout="@layout/abc_screen_content_include" />
+
+</android.support.v7.widget.FitWindowsLinearLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_screen_simple.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+This is an optimized layout for a screen, with the minimum set of features
+enabled.
+-->
+
+<android.support.v7.widget.FitWindowsFrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/action_bar_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true">
+
+ <include layout="@layout/abc_screen_content_include" />
+
+ <android.support.v7.widget.ViewStubCompat
+ android:id="@+id/action_mode_bar_stub"
+ android:inflatedId="@+id/action_mode_bar"
+ android:layout="@layout/abc_action_mode_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+</android.support.v7.widget.FitWindowsFrameLayout><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_screen_simple_overlay_action_mode.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<android.support.v7.widget.ActionBarOverlayLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/decor_content_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true">
+
+ <include layout="@layout/abc_screen_content_include"/>
+
+ <android.support.v7.widget.ActionBarContainer
+ android:id="@+id/action_bar_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ style="?attr/actionBarStyle"
+ android:touchscreenBlocksFocus="true"
+ android:gravity="top">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/action_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:navigationContentDescription="@string/abc_action_bar_up_description"
+ style="?attr/toolbarStyle"/>
+
+ <android.support.v7.widget.ActionBarContextView
+ android:id="@+id/action_context_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:theme="?attr/actionBarTheme"
+ style="?attr/actionModeStyle"/>
+
+ </android.support.v7.widget.ActionBarContainer>
+
+</android.support.v7.widget.ActionBarOverlayLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_screen_toolbar.xml -->
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:paddingLeft="@dimen/abc_dropdownitem_text_padding_left"
- android:paddingRight="4dip"
android:layout_width="match_parent"
- android:layout_height="?attr/searchResultListItemHeight" >
+ android:layout_height="58dip"
+ style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown">
<!-- Icons come first in the layout, since their placement doesn't depend on
the placement of the text views. -->
- <ImageView android:id="@android:id/icon1"
+ <ImageView
+ android:id="@android:id/icon1"
android:layout_width="@dimen/abc_dropdownitem_icon_width"
android:layout_height="48dip"
android:scaleType="centerInside"
- android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
- android:visibility="invisible" />
+ android:visibility="invisible"
+ style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Icon1" />
- <ImageView android:id="@+id/edit_query"
+ <ImageView
+ android:id="@+id/edit_query"
android:layout_width="48dip"
android:layout_height="48dip"
android:scaleType="centerInside"
- android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
- android:src="?attr/searchViewEditQuery"
- android:background="?attr/searchViewEditQueryBackground"
- android:visibility="gone" />
+ android:background="?attr/selectableItemBackground"
+ android:visibility="gone"
+ style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Query" />
- <ImageView android:id="@android:id/icon2"
+ <ImageView
+ android:id="@id/android:icon2"
android:layout_width="48dip"
android:layout_height="48dip"
android:scaleType="centerInside"
android:layout_alignWithParentIfMissing="true"
- android:layout_toLeftOf="@id/edit_query"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
- android:visibility="gone" />
+ android:visibility="gone"
+ style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Icon2" />
<!-- The subtitle comes before the title, since the height of the title depends on whether the
android:layout_height="29dip"
android:paddingBottom="4dip"
android:gravity="top"
- android:layout_toRightOf="@android:id/icon1"
- android:layout_toLeftOf="@android:id/icon2"
android:layout_alignWithParentIfMissing="true"
android:layout_alignParentBottom="true"
android:visibility="gone" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
- android:layout_toRightOf="@android:id/icon1"
- android:layout_toLeftOf="@android:id/icon2"
android:layout_above="@android:id/text2" />
-</RelativeLayout><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_search_dropdown_item_icons_2line.xml -->
\ No newline at end of file
+</RelativeLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_search_dropdown_item_icons_2line.xml -->
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="horizontal"
- >
+ android:orientation="horizontal">
<!-- This is actually used for the badge icon *or* the badge label (or neither) -->
<TextView
android:drawablePadding="0dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary"
- android:visibility="gone"
- />
+ android:visibility="gone" />
<ImageView
android:id="@+id/search_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
- android:src="?attr/searchViewSearchIcon"
android:focusable="true"
- android:contentDescription="@string/abc_searchview_description_search"
- />
+ android:contentDescription="@string/abc_searchview_description_search" />
<LinearLayout
android:id="@+id/search_edit_frame"
android:layout_marginBottom="4dip"
android:layout_marginLeft="8dip"
android:layout_marginRight="8dip"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:layoutDirection="locale">
<ImageView
android:id="@+id/search_mag_icon"
android:layout_width="@dimen/abc_dropdownitem_icon_width"
android:layout_height="wrap_content"
android:scaleType="centerInside"
- android:layout_marginLeft="@dimen/abc_dropdownitem_text_padding_left"
android:layout_gravity="center_vertical"
- android:src="?attr/searchViewSearchIcon"
android:visibility="gone"
- />
+ style="@style/RtlOverlay.Widget.AppCompat.SearchView.MagIcon" />
<!-- Inner layout contains the app icon, button(s) and EditText -->
<LinearLayout
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
- android:orientation="horizontal"
- android:background="?attr/searchViewTextField">
+ android:orientation="horizontal">
<view class="android.support.v7.widget.SearchView$SearchAutoComplete"
- style="?attr/searchViewAutoCompleteTextView"
android:id="@+id/search_src_text"
android:layout_height="36dip"
android:layout_width="0dp"
android:dropDownHeight="wrap_content"
android:dropDownAnchor="@id/search_edit_frame"
android:dropDownVerticalOffset="0dip"
- android:dropDownHorizontalOffset="0dip"
- android:contentDescription="@string/abc_searchview_description_query"
- />
+ android:dropDownHorizontalOffset="0dip" />
<ImageView
android:id="@+id/search_close_btn"
android:paddingLeft="8dip"
android:paddingRight="8dip"
android:layout_gravity="center_vertical"
- android:background="?attr/selectableItemBackground"
- android:src="?attr/searchViewCloseIcon"
+ android:background="?attr/selectableItemBackgroundBorderless"
android:focusable="true"
- android:contentDescription="@string/abc_searchview_description_clear"
- />
+ android:contentDescription="@string/abc_searchview_description_clear" />
</LinearLayout>
android:id="@+id/submit_area"
android:orientation="horizontal"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:background="?attr/searchViewTextFieldRight">
+ android:layout_height="match_parent">
<ImageView
android:id="@+id/search_go_btn"
android:layout_gravity="center_vertical"
android:paddingLeft="16dip"
android:paddingRight="16dip"
- android:background="?attr/selectableItemBackground"
- android:src="?attr/searchViewGoIcon"
+ android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="gone"
android:focusable="true"
- android:contentDescription="@string/abc_searchview_description_submit"
- />
+ android:contentDescription="@string/abc_searchview_description_submit" />
<ImageView
android:id="@+id/search_voice_btn"
android:layout_gravity="center_vertical"
android:paddingLeft="16dip"
android:paddingRight="16dip"
- android:src="?attr/searchViewVoiceIcon"
- android:background="?attr/selectableItemBackground"
+ android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="gone"
android:focusable="true"
- android:contentDescription="@string/abc_searchview_description_voice"
- />
+ android:contentDescription="@string/abc_searchview_description_voice" />
</LinearLayout>
</LinearLayout>
-
-</LinearLayout><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_search_view.xml -->
\ No newline at end of file
+</LinearLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_search_view.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This layout file is used by the AlertDialog when displaying a list of items.
+ This layout file is inflated and used as the ListView to display the items.
+ Assign an ID so its state will be saved/restored.
+-->
+<ListView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/select_dialog_listview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:cacheColorHint="@null"
+ android:divider="?attr/listDividerAlertDialog"
+ android:scrollbars="vertical"
+ android:overScrollMode="ifContentScrolls"
+ android:fadingEdge="none"
+ android:paddingTop="@dimen/abc_dialog_list_padding_vertical_material"
+ android:paddingBottom="@dimen/abc_dialog_list_padding_vertical_material"
+ android:clipToPadding="false"
+ style="@style/Widget.AppCompat.ListView" /><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_select_dialog_material.xml -->
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/action_bar_root"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:fitsSystemWindows="true">
-
- <FrameLayout
- android:id="@id/action_bar_activity_content"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:foreground="?android:attr/windowContentOverlay"/>
-
-</LinearLayout>
-<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/abc_simple_decor.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
+ style="?android:attr/borderlessButtonStyle"
+ android:id="@+id/action0"
+ android:layout_width="48dp"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="2dp"
+ android:layout_marginRight="2dp"
+ android:layout_weight="1"
+ android:gravity="center"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_media_action.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
+ style="?android:attr/borderlessButtonStyle"
+ android:id="@+id/cancel_action"
+ android:layout_width="48dp"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="2dp"
+ android:layout_marginRight="2dp"
+ android:layout_weight="1"
+ android:src="@drawable/abc_ic_clear_mtrl_alpha"
+ android:gravity="center"
+ android:visibility="gone"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_media_cancel_action.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/status_bar_latest_event_content"
+ android:layout_width="match_parent"
+ android:layout_height="128dp"
+ >
+ <ImageView android:id="@+id/icon"
+ android:layout_width="@dimen/notification_large_icon_width"
+ android:layout_height="@dimen/notification_large_icon_height"
+ android:scaleType="centerCrop"
+ />
+ <include layout="@layout/notification_media_cancel_action"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_marginLeft="2dp"
+ android:layout_marginRight="2dp"
+ android:layout_alignParentRight="true"/>
+ <include layout="@layout/notification_template_lines"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="fill_vertical"
+ android:layout_marginLeft="@dimen/notification_large_icon_width"
+ android:layout_marginStart="@dimen/notification_large_icon_width"
+ android:layout_toLeftOf="@id/cancel_action"
+ android:layout_toStartOf="@id/cancel_action"/>
+ <LinearLayout
+ android:id="@+id/media_actions"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:layout_alignParentBottom="true"
+ android:layout_marginLeft="12dp"
+ android:layout_marginRight="12dp"
+ android:orientation="horizontal"
+ android:layoutDirection="ltr"
+ >
+ <!-- media buttons will be added here -->
+ </LinearLayout>
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_above="@id/media_actions"
+ android:id="@+id/action_divider"
+ android:background="?android:attr/dividerHorizontal" />
+</RelativeLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_template_big_media.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<!-- Layout to be used with only max 3 actions. It has a much larger picture at the left side-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/status_bar_latest_event_content"
+ android:layout_width="match_parent"
+ android:layout_height="128dp"
+ >
+ <ImageView android:id="@+id/icon"
+ android:layout_width="128dp"
+ android:layout_height="128dp"
+ android:scaleType="centerCrop"
+ />
+
+ <include layout="@layout/notification_media_cancel_action"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_marginLeft="2dp"
+ android:layout_marginRight="2dp"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"/>
+
+ <include layout="@layout/notification_template_lines"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="128dp"
+ android:layout_marginStart="128dp"
+ android:layout_toLeftOf="@id/cancel_action"
+ android:layout_toStartOf="@id/cancel_action"/>
+
+ <LinearLayout
+ android:id="@+id/media_actions"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:layout_toRightOf="@id/icon"
+ android:layout_toEndOf="@id/icon"
+ android:layout_alignParentBottom="true"
+ android:layout_marginLeft="12dp"
+ android:layout_marginRight="12dp"
+ android:orientation="horizontal"
+ android:layoutDirection="ltr"
+ >
+ <!-- media buttons will be added here -->
+ </LinearLayout>
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_toRightOf="@id/icon"
+ android:layout_toEndOf="@id/icon"
+ android:layout_above="@id/media_actions"
+ android:id="@+id/action_divider"
+ android:background="?android:attr/dividerHorizontal" />
+</RelativeLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_template_big_media_narrow.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingRight="8dp"
+ android:paddingEnd="8dp"
+ android:paddingTop="2dp"
+ android:paddingBottom="2dp"
+ >
+ <LinearLayout
+ android:id="@+id/line1"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="6dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginStart="8dp"
+ android:orientation="horizontal"
+ >
+ <TextView android:id="@+id/title"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:layout_weight="1"
+ />
+ <include
+ layout="@layout/notification_template_part_time"
+ android:id="@+id/time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:visibility="gone"
+ />
+ <include
+ layout="@layout/notification_template_part_chronometer"
+ android:id="@+id/chronometer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:visibility="gone"
+ />
+ </LinearLayout>
+ <TextView android:id="@+id/text2"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Line2"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-2dp"
+ android:layout_marginBottom="-2dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginStart="8dp"
+ android:singleLine="true"
+ android:fadingEdge="horizontal"
+ android:ellipsize="marquee"
+ android:visibility="gone"
+ />
+ <LinearLayout
+ android:id="@+id/line3"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:layout_marginLeft="8dp"
+ android:layout_marginStart="8dp"
+ >
+ <TextView android:id="@+id/text"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ />
+ <TextView android:id="@+id/info"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Info"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:singleLine="true"
+ android:gravity="center"
+ android:paddingLeft="8dp"
+ android:paddingStart="8dp"
+ />
+ </LinearLayout>
+</LinearLayout><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_template_lines.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/status_bar_latest_event_content"
+ android:layout_width="match_parent"
+ android:layout_height="64dp"
+ android:orientation="horizontal"
+ >
+ <ImageView android:id="@+id/icon"
+ android:layout_width="@dimen/notification_large_icon_width"
+ android:layout_height="@dimen/notification_large_icon_width"
+ android:scaleType="centerCrop"
+ />
+ <include layout="@layout/notification_template_lines"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+ <LinearLayout
+ android:id="@+id/media_actions"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_vertical|end"
+ android:orientation="horizontal"
+ android:layoutDirection="ltr"
+ >
+ <!-- media buttons will be added here -->
+ </LinearLayout>
+ <include layout="@layout/notification_media_cancel_action"
+ android:layout_width="48dp"
+ android:layout_height="match_parent"
+ android:layout_marginRight="6dp"
+ android:layout_marginEnd="6dp"/>
+ <ImageView android:id="@+id/end_padder"
+ android:layout_width="6dp"
+ android:layout_height="match_parent"
+ />
+</LinearLayout>
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_template_media.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<Chronometer android:id="@+id/chronometer" xmlns:android="http://schemas.android.com/apk/res/android"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:singleLine="true"
+ android:gravity="center"
+ android:paddingLeft="8dp"
+ android:paddingStart="8dp"
+ />
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_template_part_chronometer.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<DateTimeView android:id="@+id/time" xmlns:android="http://schemas.android.com/apk/res/android"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:singleLine="true"
+ android:gravity="center"
+ android:paddingLeft="8dp"
+ android:paddingStart="8dp"
+ />
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/notification_template_part_time.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This layout file is used by the AlertDialog when displaying a list of items.
+ This layout file is inflated and used as the TextView to display individual
+ items.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/listPreferredItemHeightSmall"
+ android:textAppearance="?attr/textAppearanceListItemSmall"
+ android:textColor="?attr/textColorAlertDialogListItem"
+ android:gravity="center_vertical"
+ android:paddingLeft="?attr/listPreferredItemPaddingLeft"
+ android:paddingRight="?attr/listPreferredItemPaddingRight"
+ android:ellipsize="marquee" />
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/select_dialog_item_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/listPreferredItemHeightSmall"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="?attr/textColorAlertDialogListItem"
+ android:gravity="center_vertical"
+ android:paddingLeft="@dimen/abc_select_dialog_padding_start_material"
+ android:paddingRight="?attr/dialogPreferredPadding"
+ android:paddingStart="@dimen/abc_select_dialog_padding_start_material"
+ android:paddingEnd="?attr/dialogPreferredPadding"
+ android:drawableLeft="?android:attr/listChoiceIndicatorMultiple"
+ android:drawableStart="?android:attr/listChoiceIndicatorMultiple"
+ android:drawablePadding="20dp"
+ android:ellipsize="marquee" />
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/select_dialog_multichoice_material.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/listPreferredItemHeightSmall"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="?attr/textColorAlertDialogListItem"
+ android:gravity="center_vertical"
+ android:paddingLeft="@dimen/abc_select_dialog_padding_start_material"
+ android:paddingRight="?attr/dialogPreferredPadding"
+ android:paddingStart="@dimen/abc_select_dialog_padding_start_material"
+ android:paddingEnd="?attr/dialogPreferredPadding"
+ android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
+ android:drawableStart="?android:attr/listChoiceIndicatorSingle"
+ android:drawablePadding="20dp"
+ android:ellipsize="marquee" />
+<!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/select_dialog_singlechoice_material.xml -->
\ No newline at end of file
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="?attr/dropdownListPreferredItemHeight"
- android:ellipsize="marquee"/><!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/layout/support_simple_spinner_dropdown_item.xml -->
\ No newline at end of file
+ android:ellipsize="marquee"/><!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/layout/support_simple_spinner_dropdown_item.xml -->
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-af/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigeer tuis"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigeer op"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Nog opsies"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Klaar"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Sien alles"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Kies \'n program"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"AF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AAN"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Soek …"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Vee navraag uit"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Soeknavraag"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Soek"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Dien navraag in"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Stemsoektog"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Deel met"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Deel met %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Vou in"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-af/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigeer tuis"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigeer op"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Nog opsies"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Klaar"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Sien alles"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Kies \'n program"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Vee navraag uit"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Soeknavraag"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Soek"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Dien navraag in"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Stemsoektog"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Deel met"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Deel met %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-am/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ወደ መነሻ ይዳስሱ"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s፣ %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s፣ %2$s፣ %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ወደ ላይ ይዳስሱ"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ተጨማሪ አማራጮች"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"ተከናውኗል"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ሁሉንም ይመልከቱ"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"መተግበሪያ ይምረጡ"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ጠፍቷል"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"በርቷል"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ፈልግ…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"መጠይቅ አጽዳ"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"የፍለጋ ጥያቄ"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ፍለጋ"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"መጠይቅ ያስረክቡ"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"የድምፅ ፍለጋ"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"ከሚከተለው ጋር ያጋሩ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"ከ%s ጋር ያጋሩ"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ሰብስብ"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-am/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"ወደ መነሻ ይዳስሱ"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"ወደ ላይ ይዳስሱ"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"ተጨማሪ አማራጮች"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"ተከናውኗል"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ሁሉንም ይመልከቱ"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"መተግበሪያ ይምረጡ"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"መጠይቅ አጽዳ"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"የፍለጋ ጥያቄ"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"ፍለጋ"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"መጠይቅ ያስረክቡ"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"የድምፅ ፍለጋ"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ከሚከተለው ጋር ያጋሩ"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"ከ%s ጋር ያጋሩ"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ar/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"التنقل إلى الشاشة الرئيسية"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s، %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s، %2$s، %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"التنقل إلى أعلى"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"خيارات إضافية"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"تم"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"عرض الكل"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"اختيار تطبيق"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"إيقاف"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"تشغيل"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"بحث…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"محو طلب البحث"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"طلب البحث"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"بحث"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"إرسال طلب البحث"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"البحث الصوتي"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"مشاركة مع"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"مشاركة مع %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"تصغير"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"+999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ar/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"التنقل إلى الشاشة الرئيسية"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"التنقل إلى أعلى"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"خيارات إضافية"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"تم"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"عرض الكل"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"اختيار تطبيق"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"محو طلب البحث"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"طلب البحث"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"بحث"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"إرسال طلب البحث"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"البحث الصوتي"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"مشاركة مع"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"مشاركة مع %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-az-rAZ/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Evə get"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Yuxarı get"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Daha çox seçim"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Hazırdır"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Hamısına baxın"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Tətbiq seçin"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DEAKTİV"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AKTİV"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Axtarış..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Sorğunu təmizlə"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Axtarış sorğusu"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Axtarış"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Sorğunu göndərin"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Səsli axtarış"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Bununla paylaşın"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Dağıt"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-bg/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Придвижване към „Начало“"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"„%1$s“ – %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"„%1$s“, „%2$s“ – %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Придвижване нагоре"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Още опции"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Готово"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Вижте всички"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Изберете приложение"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ИЗКЛ."</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ВКЛ."</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Търсете…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Изчистване на заявката"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Заявка за търсене"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Търсене"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Изпращане на заявката"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Гласово търсене"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Споделяне със:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Споделяне със: %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Свиване"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-bg/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Придвижване към „Начало“"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Придвижване нагоре"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Още опции"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Готово"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Вижте всички"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Изберете приложение"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Изчистване на заявката"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Заявка за търсене"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Търсене"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Изпращане на заявката"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Гласово търсене"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Споделяне със:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Споделяне със: %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-bn-rBD/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"হোম এ নেভিগেট করুন"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"উপরের দিকে নেভিগেট করুন"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"আরো বিকল্প"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"সম্পন্ন হয়েছে"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"সবগুলো দেখুন"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"একটি অ্যাপ্লিকেশান চয়ন করুন"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"বন্ধ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"চালু"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"অনুসন্ধান..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ক্যোয়ারী সাফ করুন"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ক্যোয়ারী অনুসন্ধান করুন"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"অনুসন্ধান করুন"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ক্যোয়ারী জমা দিন"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ভয়েস অনুসন্ধান"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"এর সাথে ভাগ করুন"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s এর সাথে ভাগ করুন"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"সঙ্কুচিত করুন"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"৯৯৯+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ca/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navega a la pàgina d\'inici"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navega cap a dalt"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Més opcions"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Fet"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Mostra\'ls tots"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Selecciona una aplicació"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESACTIVAT"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ACTIVAT"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Cerca..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Esborra la consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta de cerca"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Cerca"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Envia la consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Cerca per veu"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Comparteix amb"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Comparteix amb %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Replega"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"+999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ca/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navega a la pàgina d\'inici"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navega cap a dalt"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Més opcions"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Fet"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Mostra\'ls tots"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Selecciona una aplicació"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Esborra la consulta"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Consulta de cerca"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Cerca"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Envia la consulta"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Cerca per veu"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Comparteix amb"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Comparteix amb %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-cs/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Přejít na plochu"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s – %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s – %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Přejít nahoru"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Více možností"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Hotovo"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Zobrazit vše"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Vybrat aplikaci"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"VYPNUTO"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ZAPNUTO"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Vyhledat…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Smazat dotaz"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Vyhledávací dotaz"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Hledat"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Odeslat dotaz"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Hlasové vyhledávání"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Sdílet pomocí"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Sdílet pomocí %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Sbalit"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-cs/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Přejít na plochu"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Přejít nahoru"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Více možností"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Hotovo"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Zobrazit vše"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Vybrat aplikaci"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Smazat dotaz"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Vyhledávací dotaz"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Hledat"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Odeslat dotaz"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Hlasové vyhledávání"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Sdílet pomocí"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Sdílet pomocí %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-da/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Naviger hjem"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Naviger op"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Flere muligheder"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Luk"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Se alle"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Vælg en app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"FRA"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"TIL"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Søg…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Ryd forespørgslen"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Søgeforespørgsel"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Søg"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Indsend forespørgslen"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Talesøgning"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Del med"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Del med %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Skjul"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-da/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Naviger hjem"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Naviger op"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Flere muligheder"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Luk"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Se alle"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Vælg en app"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Ryd forespørgslen"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Søgeforespørgsel"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Søg"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Indsend forespørgslen"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Stemmesøgning"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Del med"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Del med %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-de/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Zur Startseite"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s: %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s: %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Nach oben"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Weitere Optionen"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Fertig"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Alle ansehen"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"App auswählen"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"Aus"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"An"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Suchen…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Suchanfrage löschen"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Suchanfrage"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Suchen"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Suchanfrage senden"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Sprachsuche"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Freigeben für"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Freigeben für %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Minimieren"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-de/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Zur Startseite"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Nach oben"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Weitere Optionen"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Fertig"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Alle ansehen"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"App auswählen"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Suchanfrage löschen"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Suchanfrage"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Suchen"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Suchanfrage senden"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Sprachsuche"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Freigeben für"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Freigeben für %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-el/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Πλοήγηση στην αρχική σελίδα"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Πλοήγηση προς τα επάνω"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Περισσότερες επιλογές"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Τέλος"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Προβολή όλων"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Επιλέξτε κάποια εφαρμογή"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ΕΝΕΡΓΟΠΟΙΗΣΗ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Αναζήτηση…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Διαγραφή ερωτήματος"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Ερώτημα αναζήτησης"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Αναζήτηση"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Υποβολή ερωτήματος"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Φωνητική αναζήτηση"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Κοινή χρήση με"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Κοινή χρήση με %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Σύμπτυξη"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-el/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Πλοήγηση στην αρχική σελίδα"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Πλοήγηση προς τα επάνω"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Περισσότερες επιλογές"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Τέλος"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Προβολή όλων"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Επιλέξτε κάποια εφαρμογή"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Διαγραφή ερωτήματος"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Ερώτημα αναζήτησης"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Αναζήτηση"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Υποβολή ερωτήματος"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Φωνητική αναζήτηση"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Κοινή χρήση με"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Κοινή χρήση με %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-en-rAU/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigate home"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigate up"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"More options"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Done"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"See all"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Choose an app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"OFF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ON"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Search…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Clear query"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Search query"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Search"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Submit query"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Voice search"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Share with"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Share with %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Collapse"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-en-rGB/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigate home"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigate up"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"More options"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Done"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"See all"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Choose an app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"OFF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ON"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Search…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Clear query"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Search query"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Search"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Submit query"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Voice search"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Share with"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Share with %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Collapse"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-en-rGB/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigate home"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigate up"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"More options"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Finished"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"See all"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Choose an app"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Clear query"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Search query"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Search"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Submit query"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Voice search"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Share with"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Share with %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-en-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigate home"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigate up"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"More options"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Done"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"See all"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Choose an app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"OFF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ON"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Search…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Clear query"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Search query"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Search"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Submit query"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Voice search"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Share with"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Share with %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Collapse"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-en-rIN/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigate home"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigate up"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"More options"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Finished"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"See all"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Choose an app"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Clear query"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Search query"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Search"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Submit query"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Voice search"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Share with"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Share with %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-es-rUS/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navegar a la página principal"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navegar hacia arriba"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Más opciones"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Listo"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ver todo"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Elige una aplicación."</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESACTIVAR"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ACTIVAR"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Buscar…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Eliminar la consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta de búsqueda"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Búsqueda"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Enviar consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Búsqueda por voz"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Compartir con"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Compartir con %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Contraer"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-es-rUS/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navegar a la página principal"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navegar hacia arriba"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Más opciones"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Listo"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver todo"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Elige una aplicación."</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Eliminar la consulta"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Consulta de búsqueda"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Búsqueda"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Enviar consulta"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Búsqueda por voz"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartir con"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartir con %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-es/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Ir a la pantalla de inicio"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Desplazarse hacia arriba"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Más opciones"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Listo"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ver todo"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Seleccionar una aplicación"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"NO"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"SÍ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Buscar…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Borrar consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Buscar"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Enviar consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Búsqueda por voz"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Compartir con"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Compartir con %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Contraer"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"+999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-es/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Ir a la pantalla de inicio"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Desplazarse hacia arriba"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Más opciones"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Listo"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver todo"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Seleccionar una aplicación"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Borrar consulta"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Consulta"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Buscar"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Enviar consulta"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Búsqueda por voz"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartir con"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartir con %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-et-rEE/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigeerimine avaekraanile"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigeerimine üles"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Rohkem valikuid"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Valmis"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Kuva kõik"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Valige rakendus"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"VÄLJAS"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"SEES"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Otsige …"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Päringu tühistamine"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Otsingupäring"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Otsing"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Päringu esitamine"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Häälotsing"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Jagamine:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Jagamine kasutajaga %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Ahendamine"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-et-rEE/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigeerimine avaekraanile"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigeerimine üles"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Rohkem valikuid"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Valmis"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Kuva kõik"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Valige rakendus"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Päringu tühistamine"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Otsingupäring"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Otsing"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Päringu esitamine"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Häälotsing"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Jagamine:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Jagamine kasutajaga %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-eu-rES/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Joan orri nagusira"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Joan gora"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Aukera gehiago"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Eginda"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ikusi guztiak"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Aukeratu aplikazio bat"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESAKTIBATUTA"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AKTIBATUTA"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Bilatu…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Garbitu kontsulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Bilaketa-kontsulta"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Bilatu"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Bidali kontsulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Ahots bidezko bilaketa"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Partekatu hauekin"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Partekatu %s erabiltzailearekin"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Tolestu"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-fa/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"پیمایش به صفحه اصلی"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s، %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s، %2$s، %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"پیمایش به بالا"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"گزینههای بیشتر"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"تمام"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"مشاهده همه"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"انتخاب برنامه"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"خاموش"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"روشن"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"جستجو…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"پاک کردن عبارت جستجو"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"عبارت جستجو"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"جستجو"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ارسال عبارت جستجو"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"جستجوی شفاهی"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"اشتراکگذاری با"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"اشتراکگذاری با %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"کوچک کردن"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"۹۹۹+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-fa/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"پیمایش به صفحه اصلی"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"پیمایش به بالا"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"گزینههای بیشتر"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"انجام شد"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"مشاهده همه"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"انتخاب برنامه"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"پاک کردن عبارت جستجو"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"عبارت جستجو"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"جستجو"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"ارسال عبارت جستجو"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"جستجوی شفاهی"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"اشتراکگذاری با"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"اشتراکگذاری با %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-fi/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Siirry etusivulle"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Siirry ylös"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Lisää"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Valmis"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Näytä kaikki"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Valitse sovellus"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"POIS KÄYTÖSTÄ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"KÄYTÖSSÄ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Haku…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Tyhjennä kysely"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Hakulauseke"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Haku"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Lähetä kysely"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Puhehaku"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Jakaminen:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Jakaminen: %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Kutista"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-fi/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Siirry etusivulle"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Siirry ylös"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Lisää"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Valmis"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Näytä kaikki"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Valitse sovellus"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Tyhjennä kysely"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Hakulauseke"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Haku"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Lähetä kysely"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Puhehaku"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Jakaminen:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Jakaminen: %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-fr-rCA/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Revenir à l\'accueil"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Revenir en haut de la page"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Plus d\'options"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Terminé"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Voir toutes les chaînes"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Sélectionnez une application"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DÉSACTIVÉ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ACTIVÉ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Recherche en cours..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Effacer la requête"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Requête de recherche"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Rechercher"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Envoyer la requête"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Recherche vocale"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Partager"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Partager avec %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Réduire"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">">999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-fr-rCA/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Revenir à l\'accueil"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Revenir en haut de la page"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Plus d\'options"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Terminé"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Voir toutes les chaînes"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Sélectionnez une application"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Effacer la requête"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Requête de recherche"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Rechercher"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Envoyer la requête"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Recherche vocale"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partager avec"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partager avec %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-fr/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Revenir à l\'accueil"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Revenir en haut de la page"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Plus d\'options"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"OK"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Tout afficher"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Sélectionner une application"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DÉSACTIVÉ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ACTIVÉ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Rechercher…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Effacer la requête"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Requête de recherche"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Rechercher"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Envoyer la requête"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Recherche vocale"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Partager avec"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Partager avec %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Réduire"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">">999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-fr/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Revenir à l\'accueil"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Revenir en haut de la page"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Plus d\'options"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"OK"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Tout afficher"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Sélectionner une application"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Effacer la requête"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Requête de recherche"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Rechercher"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Envoyer la requête"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Recherche vocale"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partager avec"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partager avec %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-gl-rES/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Ir á páxina de inicio"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Desprazarse cara arriba"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Máis opcións"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Feito"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ver todas"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Escoller unha aplicación"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESACTIVAR"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ACTIVAR"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Buscar…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Borrar consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta de busca"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Buscar"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Enviar consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Busca de voz"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Compartir con"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Compartir con %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Contraer"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">">999"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-gu-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"હોમ પર નેવિગેટ કરો"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ઉપર નેવિગેટ કરો"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"વધુ વિકલ્પો"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"થઈ ગયું"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"બધું જુઓ"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"એક એપ્લિકેશન પસંદ કરો"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"બંધ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ચાલુ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"શોધો…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ક્વેરી સાફ કરો"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"શોધ ક્વેરી"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"શોધો"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ક્વેરી સબમિટ કરો"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"વૉઇસ શોધ"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"આની સાથે શેર કરો"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s સાથે શેર કરો"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"સંકુચિત કરો"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-h320dp/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_allow_stacked_button_bar">true</bool>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-h720dp/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_alert_dialog_button_bar_height">54dip</dimen>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-hdpi/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle.Common">
+ <item name="barLength">18.66dp</item>
+ <item name="gapBetweenBars">3.33dp</item>
+ <item name="drawableSize">24dp</item>
+ </style>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-hi/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"मुख्यपृष्ठ पर नेविगेट करें"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ऊपर नेविगेट करें"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"अधिक विकल्प"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"पूर्ण"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"सभी देखें"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"कोई एप्लिकेशन चुनें"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"बंद"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"चालू"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"खोजा जा रहा है…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"क्वेरी साफ़ करें"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"खोज क्वेरी"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"खोजें"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"क्वेरी सबमिट करें"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ध्वनि खोज"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"इसके द्वारा साझा करें"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s के साथ साझा करें"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"संक्षिप्त करें"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-hi/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"मुखपृष्ठ पर नेविगेट करें"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"ऊपर नेविगेट करें"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"अधिक विकल्प"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"पूर्ण"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"सभी देखें"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"कोई एप्लिकेशन चुनें"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"क्वेरी साफ़ करें"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"खोज क्वेरी"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"खोजें"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"क्वेरी सबमिट करें"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"ध्वनि खोज"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"इसके द्वारा साझा करें"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s के साथ साझा करें"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-hr/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Idi na početnu"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Idi gore"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Dodatne opcije"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Gotovo"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Prikaži sve"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Odabir aplikacije"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ISKLJUČENO"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"UKLJUČENO"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Pretražite…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Izbriši upit"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Upit za pretraživanje"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Pretraživanje"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Pošalji upit"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Glasovno pretraživanje"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Dijeljenje sa"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Dijeljenje sa: %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Sažmi"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-hr/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Idi na početnu"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Idi gore"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Dodatne opcije"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Gotovo"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Prikaži sve"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Odabir aplikacije"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Izbriši upit"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Upit za pretraživanje"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Pretraživanje"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Pošalji upit"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovno pretraživanje"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Dijeljenje sa"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Dijeljenje sa: %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-hu/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Ugrás a főoldalra"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Felfelé mozgatás"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"További lehetőségek"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Kész"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Összes megtekintése"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Válasszon ki egy alkalmazást"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"KI"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"BE"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Keresés…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Lekérdezés törlése"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Keresési lekérdezés"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Keresés"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Lekérdezés küldése"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Hangalapú keresés"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Megosztás a következővel:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Megosztás a következővel: %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Összecsukás"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-hu/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Ugrás a főoldalra"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Felfelé mozgatás"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"További lehetőségek"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Kész"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Összes megtekintése"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Válasszon ki egy alkalmazást"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Lekérdezés törlése"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Keresési lekérdezés"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Keresés"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Lekérdezés küldése"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Hangalapú keresés"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Megosztás a következővel:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Megosztás a következővel: %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-hy-rAM/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Ուղղվել տուն"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Ուղղվել վերև"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Այլ ընտրանքներ"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Կատարված է"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Տեսնել բոլորը"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Ընտրել ծրագիր"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ԱՆՋԱՏՎԱԾ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ՄԻԱՑՎԱԾ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Որոնում..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Մաքրել հարցումը"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Որոնման հարցում"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Որոնել"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Ուղարկել հարցումը"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Ձայնային որոնում"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Տարածել"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Տարածել ըստ %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Թաքցնել"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-hy-rAM/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Ուղղվել տուն"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Ուղղվել վերև"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Այլ ընտրանքներ"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Կատարված է"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Տեսնել բոլորը"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Ընտրել ծրագիր"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Մաքրել հարցումը"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Որոնման հարցում"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Որոնել"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Ուղարկել հարցումը"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ձայնային որոնում"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Տարածել"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Տարածել ըստ %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-in/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigasi ke beranda"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigasi naik"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Opsi lain"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Selesai"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Lihat semua"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Pilih aplikasi"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"NONAKTIF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AKTIF"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Telusuri..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Hapus kueri"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Kueri penelusuran"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Telusuri"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Kirim kueri"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Penelusuran suara"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Bagikan dengan"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Bagikan dengan %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Ciutkan"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-in/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigasi ke beranda"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigasi naik"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Opsi lain"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Selesai"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Lihat semua"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pilih aplikasi"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Hapus kueri"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Kueri penelusuran"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Telusuri"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Kirim kueri"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Penelusuran suara"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Bagikan dengan"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Bagikan dengan %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-is-rIS/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Fara heim"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Fara upp"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Fleiri valkostir"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Lokið"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Sjá allt"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Veldu forrit"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"SLÖKKT"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"KVEIKT"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Leita…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Hreinsa fyrirspurn"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Leitarfyrirspurn"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Leita"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Senda fyrirspurn"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Raddleit"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Deila með"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Deila með %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Minnka"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-it/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Vai alla home page"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Vai in alto"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Altre opzioni"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Fine"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Visualizza tutte"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Scegli un\'applicazione"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"OFF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ON"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Cerca…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Cancella query"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Query di ricerca"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Cerca"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Invia query"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Ricerca vocale"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Condividi con"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Condividi con %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Comprimi"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-it/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Vai alla home page"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Vai in alto"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Altre opzioni"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Fine"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Visualizza tutte"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Scegli un\'applicazione"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Cancella query"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Query di ricerca"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Cerca"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Invia query"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ricerca vocale"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Condividi con"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Condividi con %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-iw/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"נווט לדף הבית"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"נווט למעלה"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"עוד אפשרויות"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"בוצע"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ראה הכל"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"בחר אפליקציה"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"כבוי"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"פועל"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"חפש…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"מחק שאילתה"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"שאילתת חיפוש"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"חפש"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"שלח שאילתה"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"חיפוש קולי"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"שתף עם"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"שתף עם %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"כווץ"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-iw/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"נווט לדף הבית"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"נווט למעלה"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"עוד אפשרויות"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"בוצע"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ראה הכול"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"בחר אפליקציה"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"מחק שאילתה"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"שאילתת חיפוש"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"חפש"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"שלח שאילתה"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"חיפוש קולי"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"שתף עם"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"שתף עם %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ja/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ホームへ移動"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s、%2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s、%2$s、%3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"上へ移動"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"その他のオプション"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"完了"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"すべて表示"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"アプリの選択"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"OFF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ON"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"検索…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"検索キーワードを削除"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"検索キーワード"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"検索"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"検索キーワードを送信"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"音声検索"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"共有"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%sと共有"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"折りたたむ"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ja/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"ホームへ移動"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"上へ移動"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"その他のオプション"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"完了"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"すべて表示"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"アプリの選択"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"検索キーワードを削除"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"検索キーワード"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"検索"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"検索キーワードを送信"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"音声検索"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"共有"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%sと共有"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ka-rGE/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"მთავარზე ნავიგაცია"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ზემოთ ნავიგაცია"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"მეტი ვარიანტები"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"დასრულდა"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ყველას ნახვა"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"აპის არჩევა"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"გამორთულია"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ჩართულია"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ძიება..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"მოთხოვნის გასუფთავება"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ძიების მოთხოვნა"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ძიება"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"მოთხოვნის გადაგზავნა"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ხმოვანი ძიება"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"გაზიარება:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s-თან გაზიარება"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"აკეცვა"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ka-rGE/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"მთავარზე ნავიგაცია"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"ზემოთ ნავიგაცია"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"მეტი ვარიანტები"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"დასრულდა"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ყველას ნახვა"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"აპის არჩევა"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"მოთხოვნის გასუფთავება"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"ძიების მოთხოვნა"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"ძიება"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"მოთხოვნის გადაგზავნა"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"ხმოვანი ძიება"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"გაზიარება:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s-თან გაზიარება"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-kk-rKZ/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Негізгі бетте қозғалу"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Жоғары қозғалу"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Басқа опциялар"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Дайын"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Барлығын көру"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Қолданбаны таңдау"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ӨШІРУЛІ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ҚОСУЛЫ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Іздеу…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Сұрақты жою"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Сұрақты іздеу"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Іздеу"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Сұрақты жіберу"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Дауыс арқылы іздеу"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Бөлісу"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s бөлісу"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Тасалау"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-km-rKH/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"រកមើលទៅដើម"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"រកមើលឡើងលើ"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ជម្រើសច្រើនទៀត"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"រួចរាល់"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"មើលទាំងអស់"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"ជ្រើសកម្មវិធី"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"បិទ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"បើក"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ស្វែងរក…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"សម្អាតសំណួរ"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ស្វែងរកសំណួរ"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ស្វែងរក"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ដាក់ស្នើសំណួរ"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ការស្វែងរកសំឡេង"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"ចែករំលែកជាមួយ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"ចែករំលែកជាមួយ %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"បង្រួម"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-km-rKH/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"រកមើលទៅដើម"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"រកមើលឡើងលើ"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"ជម្រើសច្រើនទៀត"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"រួចរាល់"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"មើលទាំងអស់"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ជ្រើសកម្មវិធី"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"សម្អាតសំណួរ"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"ស្វែងរកសំណួរ"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"ស្វែងរក"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"ដាក់ស្នើសំណួរ"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"ការស្វែងរកសំឡេង"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ចែករំលែកជាមួយ"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"ចែករំលែកជាមួយ %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-kn-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ಮುಖಪುಟವನ್ನು ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ಮೇಲಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"ಮುಗಿದಿದೆ"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"ಒಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ಆಫ್"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ಆನ್"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ಹುಡುಕಿ…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ಪ್ರಶ್ನೆಯನ್ನು ತೆರವುಗೊಳಿಸು"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ಪ್ರಶ್ನೆಯನ್ನು ಹುಡುಕಿ"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ಹುಡುಕು"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ಪ್ರಶ್ನೆಯನ್ನು ಸಲ್ಲಿಸು"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ಧ್ವನಿ ಹುಡುಕಾಟ"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"ಇವರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ಸಂಕುಚಿಸು"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ko/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"홈 탐색"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"위로 탐색"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"옵션 더보기"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"완료"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"전체 보기"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"앱 선택"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"사용 안함"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"사용"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"검색..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"검색어 삭제"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"검색어"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"검색"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"검색어 보내기"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"음성 검색"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"공유 대상"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s와(과) 공유"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"접기"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ko/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"홈 탐색"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"위로 탐색"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"옵션 더보기"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"완료"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"전체 보기"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"앱 선택"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"검색어 삭제"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"검색어"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"검색"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"검색어 보내기"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"음성 검색"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"공유 대상"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s와(과) 공유"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ky-rKG/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Үйгө багыттоо"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Жогору"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Көбүрөөк мүмкүнчүлүктөр"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Даяр"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Бардыгын көрүү"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Колдонмо тандоо"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ӨЧҮК"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"КҮЙҮК"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Издөө…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Талаптарды тазалоо"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Издөө талаптары"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Издөө"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Талап жөнөтүү"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Үн аркылуу издөө"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Бөлүшүү"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s аркылуу бөлүшүү"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Жыйнап коюу"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-land/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_embed_tabs_pre_jb">true</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-land/config.xml -->
+ <eat-comment/>
+ <bool name="abc_config_allowActionMenuItemTextWithIcon">true</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-land/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_action_bar_default_height_material">48dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-land/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_action_bar_progress_bar_size">32dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-land/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_text_size_subtitle_material_toolbar">12dp</dimen>
+ <dimen name="abc_text_size_title_material_toolbar">14dp</dimen>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-land/bools.xml -->
- <eat-comment />
-
- <bool name="abc_action_bar_embed_tabs_pre_jb">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-land/config.xml -->
- <eat-comment />
-
- <bool name="abc_config_allowActionMenuItemTextWithIcon">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-land/bools.xml -->
- <eat-comment />
-
- <bool name="abc_split_action_bar_is_narrow">false</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-land/dimens.xml -->
- <eat-comment />
-
- <dimen name="abc_action_bar_default_height">40dip</dimen>
- <dimen name="abc_action_bar_icon_vertical_padding">4dip</dimen>
- <dimen name="abc_action_bar_progress_bar_size">32dp</dimen>
- <dimen name="abc_action_bar_subtitle_bottom_margin">4dip</dimen>
- <dimen name="abc_action_bar_subtitle_text_size">12dp</dimen>
- <dimen name="abc_action_bar_subtitle_top_margin">-2dp</dimen>
- <dimen name="abc_action_bar_title_text_size">16dp</dimen>
-
-</resources>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large-v14/themes_base.xml -->
- <eat-comment />
-
- <style name="Theme.Base.AppCompat.DialogWhenLarge" parent="Theme.Base.AppCompat.DialogWhenLarge.Base" />
-
- <style name="Theme.Base.AppCompat.Light.DialogWhenLarge" parent="Theme.Base.AppCompat.Light.DialogWhenLarge.Base" />
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-large/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_embed_tabs_pre_jb">true</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-large/config.xml -->
+ <eat-comment/>
+ <bool name="abc_config_allowActionMenuItemTextWithIcon">true</bool>
+ <dimen name="abc_config_prefDialogWidth">440dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-large/dimens.xml -->
+ <eat-comment/>
+ <item name="abc_dialog_fixed_height_major" type="dimen">60%</item>
+ <item name="abc_dialog_fixed_height_minor" type="dimen">90%</item>
+ <item name="abc_dialog_fixed_width_major" type="dimen">60%</item>
+ <item name="abc_dialog_fixed_width_minor" type="dimen">90%</item>
+ <item name="abc_dialog_min_width_major" type="dimen">55%</item>
+ <item name="abc_dialog_min_width_minor" type="dimen">80%</item>
+ <dimen name="abc_search_view_text_min_width">192dip</dimen>
+ <integer name="abc_max_action_buttons">4</integer>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-large/themes_base.xml -->
+ <eat-comment/>
+ <style name="Base.Theme.AppCompat.DialogWhenLarge" parent="Base.Theme.AppCompat.Dialog.FixedSize"/>
+ <style name="Base.Theme.AppCompat.Light.DialogWhenLarge" parent="Base.Theme.AppCompat.Light.Dialog.FixedSize"/>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large/bools.xml -->
- <eat-comment />
-
- <bool name="abc_action_bar_embed_tabs_pre_jb">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large/config.xml -->
- <eat-comment />
-
- <bool name="abc_config_allowActionMenuItemTextWithIcon">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large/bools.xml -->
- <eat-comment />
-
- <bool name="abc_split_action_bar_is_narrow">false</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large/config.xml -->
- <eat-comment />
-
- <dimen name="abc_config_prefDialogWidth">440dp</dimen>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large/dimens.xml -->
- <eat-comment />
-
- <dimen name="abc_search_view_text_min_width">192dip</dimen>
-
- <item name="dialog_fixed_height_major" type="dimen">60%</item>
- <item name="dialog_fixed_height_minor" type="dimen">90%</item>
- <item name="dialog_fixed_width_major" type="dimen">60%</item>
- <item name="dialog_fixed_width_minor" type="dimen">90%</item>
-
- <integer name="abc_max_action_buttons">4</integer>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-large/themes_base.xml -->
- <eat-comment />
-
- <style name="Theme.Base.AppCompat.DialogWhenLarge" parent="Theme.Base.AppCompat.Dialog.FixedSize" />
-
- <style name="Theme.Base.AppCompat.Light.DialogWhenLarge" parent="Theme.Base.AppCompat.Dialog.Light.FixedSize" />
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ldltr-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.Widget.AppCompat.Spinner.Underlined" parent="android:Widget.Material.Spinner.Underlined"/>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ldrtl-v23/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.Widget.AppCompat.Spinner.Underlined" parent="android:Widget.Material.Spinner.Underlined"/>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-lo-rLA/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ກັບໄປໜ້າຫຼັກ"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ຂຶ້ນເທິງ"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ໂຕເລືອກອື່ນ"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"ແລ້ວໆ"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ເບິ່ງທັງຫມົດ"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"ເລືອກແອັບຯ"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ປິດ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ເປີດ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ຊອກຫາ"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ລຶບຂໍ້ຄວາມຊອກຫາ"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ຊອກຫາ"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ຊອກຫາ"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ສົ່ງການຊອກຫາ"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ຊອກຫາດ້ວຍສຽງ"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"ແບ່ງປັນກັບ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"ແບ່ງປັນກັບ %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ຫຍໍ້"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-lo-rLA/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"ກັບໄປໜ້າຫຼັກ"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"ຂຶ້ນເທິງ"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"ໂຕເລືອກອື່ນ"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"ແລ້ວໆ"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ເບິ່ງທັງຫມົດ"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ເລືອກແອັບຯ"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"ລຶບຂໍ້ຄວາມຊອກຫາ"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"ຊອກຫາ"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"ຊອກຫາ"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"ສົ່ງການຊອກຫາ"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"ຊອກຫາດ້ວຍສຽງ"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ແບ່ງປັນກັບ"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"ແບ່ງປັນກັບ %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-lt/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Eiti į pagrindinį puslapį"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Eiti į viršų"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Daugiau parinkčių"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Atlikta"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Peržiūrėti viską"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Pasirinkti programą"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"IŠJUNGTI"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ĮJUNGTI"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Ieškoti..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Išvalyti užklausą"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Paieškos užklausa"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Paieška"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Pateikti užklausą"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Paieška balsu"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Bendrinti naudojant"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Bendrinti naudojant „%s“"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Sutraukti"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-lt/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Eiti į pagrindinį puslapį"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Eiti į viršų"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Daugiau parinkčių"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Atlikta"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Peržiūrėti viską"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pasirinkti programą"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Išvalyti užklausą"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Paieškos užklausa"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Paieška"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Pateikti užklausą"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Paieška balsu"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Bendrinti naudojant"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Bendrinti naudojant „%s“"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-lv/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Pārvietoties uz sākuma ekrānu"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s: %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s: %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Pārvietoties augšup"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Vairāk opciju"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Gatavs"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Skatīt visu"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Izvēlieties lietotni"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"IZSLĒGTS"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"IESLĒGTS"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Meklējiet…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Notīrīt vaicājumu"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Meklēšanas vaicājums"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Meklēt"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Iesniegt vaicājumu"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Meklēšana ar balsi"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Kopīgot ar:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Kopīgot ar %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Sakļaut"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-lv/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Pārvietoties uz sākuma ekrānu"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Pārvietoties augšup"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Vairāk opciju"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Gatavs"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Skatīt visu"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Izvēlieties lietotni"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Notīrīt vaicājumu"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Meklēšanas vaicājums"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Meklēt"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Iesniegt vaicājumu"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Meklēšana ar balsi"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Kopīgot ar:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Kopīgot ar %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-mk-rMK/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Движи се кон дома"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Движи се нагоре"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Повеќе опции"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Готово"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Види ги сите"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Избери апликација"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ИСКЛУЧЕНО"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ВКЛУЧЕНО"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Пребарување…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Исчисти барање"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Пребарај барање"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Пребарај"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Поднеси барање"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Гласовно пребарување"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Сподели со"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Собери"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ml-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ഹോമിലേക്ക് നാവിഗേറ്റുചെയ്യുക"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"മുകളിലേക്ക് നാവിഗേറ്റുചെയ്യുക"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"കൂടുതല് ഓപ്ഷനുകള്"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"പൂർത്തിയാക്കി"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"എല്ലാം കാണുക"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"ഒരു അപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ഓഫ്"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ഓൺ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"തിരയുക…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"അന്വേഷണം മായ്ക്കുക"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"തിരയൽ അന്വേഷണം"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"തിരയൽ"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"അന്വേഷണം സമർപ്പിക്കുക"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ശബ്ദ തിരയൽ"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"ഇവരുമായി പങ്കിടുക"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s എന്നതുമായി പങ്കിടുക"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ചുരുക്കുക"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-mn-rMN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Нүүр хуудас руу шилжих"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Дээш шилжих"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Нэмэлт сонголтууд"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Дууссан"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Бүгдийг харах"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Апп сонгох"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ИДЭВХГҮЙ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ИДЭВХТЭЙ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Хайх..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Асуулгыг цэвэрлэх"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Хайх асуулга"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Хайх"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Асуулгыг илгээх"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Дуут хайлт"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Хуваалцах"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s-тай хуваалцах"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Хумих"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-mn-rMN/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Нүүр хуудас руу шилжих"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Дээш шилжих"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Нэмэлт сонголтууд"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Дууссан"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Бүгдийг харах"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Апп сонгох"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Асуулгыг цэвэрлэх"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Хайх асуулга"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Хайх"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Асуулгыг илгээх"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Дуут хайлт"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Хуваалцах"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s-тай хуваалцах"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-mr-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"मुख्यपृष्ठ नेव्हिगेट करा"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"वर नेव्हिगेट करा"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"अधिक पर्याय"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"पूर्ण झाले"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"सर्व पहा"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"एक अॅप निवडा"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"बंद"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"चालू"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"शोधा…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"क्वेरी स्पष्ट करा"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"शोध क्वेरी"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"शोध"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"क्वेरी सबमिट करा"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"व्हॉइस शोध"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"यांच्यासह सामायिक करा"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s सह सामायिक करा"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"संक्षिप्त करा"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ms-rMY/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigasi skrin utama"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigasi ke atas"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Lagi pilihan"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Selesai"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Lihat semua"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Pilih apl"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"MATI"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"HIDUP"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Cari…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Kosongkan pertanyaan"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Pertanyaan carian"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Cari"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Serah pertanyaan"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Carian suara"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Kongsi dengan"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Kongsi dengan %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Runtuhkan"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ms-rMY/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigasi skrin utama"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigasi ke atas"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Lagi pilihan"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Selesai"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Lihat semua"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pilih apl"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Kosongkan pertanyaan"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Pertanyaan carian"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Cari"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Serah pertanyaan"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Carian suara"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Kongsi dengan"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Kongsi dengan %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-my-rMM/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"မူလနေရာကို သွားရန်"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s၊ %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s ၊ %2$s ၊ %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"အပေါ်သို့သွားရန်"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ပိုမိုရွေးချယ်စရာများ"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"ပြီးဆုံးပါပြီ"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"အားလုံးကို ကြည့်ရန်"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"အပလီကေးရှင်း တစ်ခုခုကို ရွေးချယ်ပါ"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ပိတ်"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ဖွင့်"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ရှာဖွေပါ..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ရှာစရာ အချက်အလက်များ ရှင်းလင်းရန်"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ရှာစရာ အချက်အလက်နေရာ"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ရှာဖွေရန်"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ရှာဖွေစရာ အချက်အလက်ကို အတည်ပြုရန်"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"အသံဖြင့် ရှာဖွေခြင်း"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"မျှဝေဖို့ ရွေးပါ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s ကို မျှဝေပါရန်"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ခေါက်ရန်"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"၉၉၉+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-nb/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Gå til startsiden"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s – %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s – %2$s – %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Gå opp"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Flere alternativer"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Ferdig"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Se alle"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Velg en app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"AV"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"PÅ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Søk …"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Slett søket"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Søkeord"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Søk"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Utfør søket"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Talesøk"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Del med"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Del med %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Skjul"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-nb/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Gå til startsiden"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Gå opp"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Flere alternativer"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Fullført"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Se alle"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Velg en app"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Slett søket"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Søkeord"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Søk"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Utfør søket"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Talesøk"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Del med"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Del med %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ne-rNP/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"गृह खोज्नुहोस्"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"माथि खोज्नुहोस्"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"थप विकल्पहरू"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"सम्पन्न भयो"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"सबै हेर्नुहोस्"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"एउटा अनुप्रयोग छान्नुहोस्"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"निष्क्रिय पार्नुहोस्"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"सक्रिय गर्नुहोस्"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"खोज्नुहोस्..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"प्रश्न हटाउनुहोस्"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"जिज्ञासाको खोज गर्नुहोस्"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"खोज्नुहोस्"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"जिज्ञासा पेस गर्नुहोस्"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"भ्वाइस खोजी"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"साझेदारी गर्नुहोस्..."</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s सँग साझेदारी गर्नुहोस्"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"संक्षिप्त पार्नुहोस्"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"९९९+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-nl/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigeren naar startpositie"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Omhoog navigeren"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Meer opties"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Gereed"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Alles weergeven"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Een app selecteren"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"UIT"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AAN"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Zoeken…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Zoekopdracht wissen"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Zoekopdracht"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Zoeken"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Zoekopdracht verzenden"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Gesproken zoekopdracht"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Delen met"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Delen met %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Samenvouwen"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-nl/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigeren naar startpositie"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Omhoog navigeren"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Meer opties"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Gereed"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Alles weergeven"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Een app selecteren"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Zoekopdracht wissen"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Zoekopdracht"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Zoeken"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Zoekopdracht verzenden"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Gesproken zoekopdracht"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Delen met"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Delen met %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-pa-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ਹੋਮ ਨੈਵੀਗੇਟ ਕਰੋ"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ਉੱਪਰ ਨੈਵੀਗੇਟ ਕਰੋ"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ਹੋਰ ਚੋਣਾਂ"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"ਹੋ ਗਿਆ"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ਸਭ ਦੇਖੋ"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"ਇੱਕ ਐਪ ਚੁਣੋ"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ਬੰਦ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ਤੇ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ਖੋਜ…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ਸਵਾਲ ਹਟਾਓ"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ਸਵਾਲ ਖੋਜੋ"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ਖੋਜੋ"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ਸਵਾਲ ਪ੍ਰਸਤੁਤ ਕਰੋ"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ਵੌਇਸ ਖੋਜ"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"ਇਸ ਨਾਲ ਸ਼ੇਅਰ ਕਰੋ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s ਨਾਲ ਸ਼ੇਅਰ ਕਰੋ"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ਨਸ਼ਟ ਕਰੋ"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-pl/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Przejdź do strony głównej"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Przejdź wyżej"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Więcej opcji"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Gotowe"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Zobacz wszystkie"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Wybierz aplikację"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"WYŁ."</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"WŁ."</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Szukaj…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Wyczyść zapytanie"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Wyszukiwane hasło"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Szukaj"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Wyślij zapytanie"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Wyszukiwanie głosowe"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Udostępnij dla"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Udostępnij dla %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Zwiń"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-pl/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Przejdź do strony głównej"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Przejdź wyżej"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Więcej opcji"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Gotowe"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Zobacz wszystkie"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Wybierz aplikację"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Wyczyść zapytanie"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Wyszukiwane hasło"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Szukaj"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Wyślij zapytanie"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Wyszukiwanie głosowe"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Udostępnij dla"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Udostępnij dla %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-port/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_embed_tabs">false</bool>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-pt-rBR/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navegar para a página inicial"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navegar para cima"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Mais opções"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Concluído"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ver tudo"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Selecione um app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESATIVAR"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ATIVAR"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Pesquisar..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Limpar consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta de pesquisa"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Pesquisar"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Enviar consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Pesquisa por voz"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Compartilhar com"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Compartilhar com %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Recolher"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-pt-rPT/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navegar para a página inicial"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navegar para cima"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Mais opções"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Concluído"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ver tudo"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Escolher uma aplicação"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESATIVADO"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ATIVADO"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Pesquisar..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Limpar consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta de pesquisa"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Pesquisar"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Enviar consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Pesquisa por voz"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Partilhar com"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Partilhar com %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Reduzir"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"+999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-pt-rPT/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navegar para a página inicial"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navegar para cima"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Mais opções"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Concluído"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver tudo"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Escolher uma aplicação"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Limpar consulta"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Consulta de pesquisa"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Pesquisar"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Enviar consulta"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Pesquisa por voz"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partilhar com"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partilhar com %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-pt/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navegar para a página inicial"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navegar para cima"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Mais opções"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Concluído"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Ver tudo"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Selecione um app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DESATIVAR"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ATIVAR"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Pesquisar..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Limpar consulta"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Consulta de pesquisa"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Pesquisar"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Enviar consulta"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Pesquisa por voz"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Compartilhar com"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Compartilhar com %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Recolher"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-pt/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navegar para a página inicial"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navegar para cima"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Mais opções"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Concluído"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver tudo"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Selecione um aplicativo"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Limpar consulta"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Consulta de pesquisa"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Pesquisar"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Enviar consulta"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Pesquisa por voz"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartilhar com"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartilhar com %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ro/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Navigați la ecranul de pornire"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigați în sus"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Mai multe opțiuni"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Terminat"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Afișați-le pe toate"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Alegeți o aplicație"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"DEZACTIVAȚI"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ACTIVAȚI"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Căutați…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Ștergeți interogarea"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Interogare de căutare"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Căutați"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Trimiteți interogarea"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Căutare vocală"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Trimiteți la"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Trimiteți la %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Restrângeți"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"˃999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ro/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Navigați la ecranul de pornire"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigați în sus"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Mai multe opțiuni"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Terminat"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Afișați-le pe toate"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Alegeți o aplicaţie"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Ștergeți interogarea"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Interogare de căutare"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Căutați"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Trimiteți interogarea"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Căutare vocală"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Trimiteți la"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Trimiteți la %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ru/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Перейти на главный экран"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Перейти вверх"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Другие параметры"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Готово"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Показать все"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Выбрать приложение"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ОТКЛ."</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ВКЛ."</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Поиск"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Удалить запрос"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Поисковый запрос"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Поиск"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Отправить запрос"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Голосовой поиск"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Открыть доступ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Открыть доступ пользователю %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Свернуть"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">">999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-ru/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Перейти на главный экран"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Перейти вверх"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Другие параметры"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Готово"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Показать все"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Выбрать приложение"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Удалить запрос"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Поисковый запрос"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Поиск"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Отправить запрос"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Голосовой поиск"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Открыть доступ"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Открыть доступ пользователю %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-si-rLK/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ගෙදරට සංචාලනය කරන්න"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"ඉහලට සංචාලනය කරන්න"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"තවත් විකල්ප"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"අවසාන වූ"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"සියල්ල බලන්න"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"යෙදුමක් තෝරන්න"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ක්රියාවිරහිතයි"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ක්රියාත්මකයි"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"සොයන්න..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"විමසුම හිස් කරන්න"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"සෙවුම් විමසුම"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"සෙවීම"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"විමසුම යොමු කරන්න"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"හඬ සෙවීම"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"සමඟ බෙදාගන්න"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s සමඟ බෙදාගන්න"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"හකුළන්න"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sk/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Prejsť na plochu"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Prejsť hore"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Ďalšie možnosti"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Hotovo"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Zobraziť všetko"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Zvoľte aplikáciu"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"VYP."</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ZAP."</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Vyhľadať…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Vymazať dopyt"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Vyhľadávací dopyt"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Hľadať"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Odoslať dopyt"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Hlasové vyhľadávanie"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Zdieľať pomocou"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Zdieľať pomocou %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Zbaliť"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sk/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Prejsť na plochu"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Prejsť hore"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Ďalšie možnosti"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Hotovo"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Zobraziť všetko"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Zvoľte aplikáciu"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Vymazať dopyt"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Vyhľadávací dopyt"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Hľadať"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Odoslať dopyt"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Hlasové vyhľadávanie"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Zdieľať pomocou"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Zdieľať pomocou %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sl/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Krmarjenje domov"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Krmarjenje navzgor"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Več možnosti"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Končano"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Pokaži vse"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Izbira aplikacije"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"IZKLOPLJENO"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"VKLOPLJENO"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Iskanje …"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Izbris poizvedbe"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Iskalna poizvedba"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Iskanje"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Pošiljanje poizvedbe"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Glasovno iskanje"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Deljenje z"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Deljenje z:"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Strni"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sl/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Krmarjenje domov"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Krmarjenje navzgor"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Več možnosti"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Končano"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Pokaži vse"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Izbira aplikacije"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Izbris poizvedbe"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Iskalna poizvedba"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Iskanje"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Pošiljanje poizvedbe"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovno iskanje"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Deljenje z"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Deljenje z:"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sq-rAL/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Orientohu për në shtëpi"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Ngjitu lart"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Opsione të tjera"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"U krye!"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Shikoji të gjitha"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Zgjidh një aplikacion"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"JOAKTIV"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AKTIV"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Kërko..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Pastro pyetjen"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Kërko pyetjen"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Kërko"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Dërgo pyetjen"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Kërkim me zë"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Shpërnda publikisht me"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Shpërnda publikisht me %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Shpalos"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sr/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Одлазак на Почетну"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Кретање нагоре"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Још опција"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Готово"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Прикажи све"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Избор апликације"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ИСКЉУЧИ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"УКЉУЧИ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Претражите..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Брисање упита"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Упит за претрагу"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Претрага"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Слање упита"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Гласовна претрага"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Дели са"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Дели са апликацијом %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Скупи"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">">999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sr/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Одлазак на Почетну"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Кретање нагоре"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Још опција"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Готово"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Прикажи све"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Избор апликације"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Брисање упита"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Упит за претрагу"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Претрага"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Слање упита"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Гласовна претрага"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Дели са"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Дели са апликацијом %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sv/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Visa startsidan"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Navigera uppåt"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Fler alternativ"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Klart"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Visa alla"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Välj en app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"AV"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"PÅ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Sök …"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Ta bort frågan"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Sökfråga"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Sök"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Skicka fråga"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Röstsökning"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Dela med"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Dela med %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Komprimera"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">">999"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sv/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Visa startsidan"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigera uppåt"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Fler alternativ"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Klart"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Visa alla"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Välj en app"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Ta bort frågan"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Sökfråga"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Sök"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Skicka fråga"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Röstsökning"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Dela med"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Dela med %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sw/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Nenda mwanzo"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Nenda juu"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Chaguo zaidi"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Nimemaliza"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Angalia zote"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Chagua programu"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"IMEZIMWA"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"IMEWASHWA"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Tafuta…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Futa hoja"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Hoja ya utafutaji"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Tafuta"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Wasilisha hoja"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Tafuta kwa kutamka"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Shiriki na:"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Shiriki na %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Kunja"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sw/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Nenda mwanzo"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Nenda juu"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Chaguo zaidi"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Nimemaliza"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Angalia zote"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Chagua programu"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Futa hoja"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Hoja ya utafutaji"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Tafuta"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Wasilisha hoja"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Tafuta kwa kutamka"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Shiriki na:"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Shiriki na %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sw600dp/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_action_bar_content_inset_material">24dp</dimen>
+ <dimen name="abc_action_bar_default_height_material">64dp</dimen>
+ <dimen name="abc_action_bar_default_padding_end_material">8dp</dimen>
+ <dimen name="abc_action_bar_default_padding_start_material">8dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sw600dp/config.xml -->
+ <eat-comment/>
+ <dimen name="abc_config_prefDialogWidth">580dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-sw600dp/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_text_size_subtitle_material_toolbar">16dp</dimen>
+ <dimen name="abc_text_size_title_material_toolbar">20dp</dimen>
+ <integer name="abc_max_action_buttons">5</integer>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sw600dp/dimens.xml -->
- <eat-comment />
-
- <dimen name="abc_action_bar_default_height">56dip</dimen>
- <dimen name="abc_action_bar_icon_vertical_padding">4dip</dimen>
- <dimen name="abc_action_bar_subtitle_bottom_margin">9dip</dimen>
- <dimen name="abc_action_bar_subtitle_text_size">14dp</dimen>
- <dimen name="abc_action_bar_subtitle_top_margin">-3dp</dimen>
- <dimen name="abc_action_bar_title_text_size">18dp</dimen>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sw600dp/config.xml -->
- <eat-comment />
-
- <dimen name="abc_config_prefDialogWidth">580dp</dimen>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-sw600dp/dimens.xml -->
- <eat-comment />
-
- <integer name="abc_max_action_buttons">5</integer>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ta-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"முகப்பிற்கு வழிசெலுத்து"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"மேலே வழிசெலுத்து"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"மேலும் விருப்பங்கள்"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"முடிந்தது"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"எல்லாம் காட்டு"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"பயன்பாட்டைத் தேர்வுசெய்க"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"முடக்கு"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"இயக்கு"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"தேடு..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"வினவலை அழி"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"தேடல் வினவல்"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"தேடு"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"வினவலைச் சமர்ப்பி"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"குரல் தேடல்"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"இதனுடன் பகிர்"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s உடன் பகிர்"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"சுருக்கு"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-te-rIN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"హోమ్కు నావిగేట్ చేయండి"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"పైకి నావిగేట్ చేయండి"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"మరిన్ని ఎంపికలు"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"పూర్తయింది"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"అన్నీ చూడండి"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"అనువర్తనాన్ని ఎంచుకోండి"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ఆఫ్ చేయి"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"ఆన్ చేయి"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"శోధించు..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ప్రశ్నను క్లియర్ చేయి"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ప్రశ్న శోధించండి"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"శోధించు"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ప్రశ్నని సమర్పించు"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"వాయిస్ శోధన"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"వీరితో భాగస్వామ్యం చేయి"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%sతో భాగస్వామ్యం చేయి"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"కుదించండి"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-th/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"นำทางไปหน้าแรก"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"นำทางขึ้น"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"ตัวเลือกอื่น"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"เสร็จสิ้น"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"ดูทั้งหมด"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"เลือกแอป"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ปิด"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"เปิด"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"ค้นหา…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"ล้างข้อความค้นหา"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"ข้อความค้นหา"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"ค้นหา"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"ส่งข้อความค้นหา"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"ค้นหาด้วยเสียง"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"แชร์กับ"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"แชร์กับ %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"ยุบ"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-th/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"นำทางไปหน้าแรก"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"นำทางขึ้น"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"ตัวเลือกอื่น"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"เสร็จสิ้น"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ดูทั้งหมด"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"เลือกแอป"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"ล้างข้อความค้นหา"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"ข้อความค้นหา"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"ค้นหา"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"ส่งข้อความค้นหา"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"ค้นหาด้วยเสียง"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"แชร์กับ"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"แชร์กับ %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-tl/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Mag-navigate patungo sa home"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Mag-navigate pataas"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Higit pang mga opsyon"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Tapos na"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Tingnan lahat"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Pumili ng isang app"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"I-OFF"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"I-ON"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Maghanap…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"I-clear ang query"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Query sa paghahanap"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Maghanap"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Isumite ang query"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Paghahanap gamit ang boses"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Ibahagi sa/kay"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Ibahagi sa/kay %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"I-collapse"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-tl/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Mag-navigate patungo sa home"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Mag-navigate pataas"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Higit pang mga opsyon"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Tapos na"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Tingnan lahat"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pumili ng isang app"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"I-clear ang query"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Query sa paghahanap"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Maghanap"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Isumite ang query"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Paghahanap gamit ang boses"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Ibahagi sa/kay"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Ibahagi sa/kay %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-tr/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Ana ekrana git"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Yukarı git"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Diğer seçenekler"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Tamamlandı"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Tümünü göster"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Bir uygulama seçin"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"KAPAT"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"AÇ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Ara…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Sorguyu temizle"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Arama sorgusu"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Ara"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Sorguyu gönder"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Sesli arama"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Şununla paylaş"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s ile paylaş"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Daralt"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-tr/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Ana ekrana git"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Yukarı git"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Diğer seçenekler"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Tamamlandı"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Tümünü göster"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Bir uygulama seçin"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Sorguyu temizle"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Arama sorgusu"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Ara"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Sorguyu gönder"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Sesli arama"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Şununla paylaş"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s ile paylaş"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-uk/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Перейти на головний"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Перейти вгору"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Інші опції"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Готово"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Переглянути всі"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Вибрати програму"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"ВИМК."</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"УВІМК."</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Пошук…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Очистити запит"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Пошуковий запит"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Пошук"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Надіслати запит"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Голосовий пошук"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Надіслати через"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Надіслати через %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Згорнути"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-uk/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Перейти на головний"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Перейти вгору"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Інші опції"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Готово"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Переглянути всі"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Вибрати програму"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Очистити запит"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Пошуковий запит"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Пошук"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Надіслати запит"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Голосовий пошук"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Надіслати через"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Надіслати через %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-ur-rPK/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"ہوم پر نیویگیٹ کریں"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"اوپر نیویگیٹ کریں"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"مزید اختیارات"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"ہو گیا"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"سبھی دیکھیں"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"ایک ایپ منتخب کریں"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"آف"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"آن"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"تلاش کریں…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"استفسار صاف کریں"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"استفسار تلاش کریں"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"تلاش کریں"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"استفسار جمع کرائیں"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"صوتی تلاش"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"اشتراک کریں مع"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"%s کے ساتھ اشتراک کریں"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"سکیڑیں"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-uz-rUZ/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Boshiga o‘tish"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Yuqoriga o‘tish"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Qo‘shimcha sozlamalar"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Tayyor"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Barchasini ko‘rish"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Dastur tanlang"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"O‘CHIQ"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"YONIQ"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Qidirish…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"So‘rovni tozalash"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"So‘rovni izlash"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Qidirish"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"So‘rov yaratish"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Ovozli qidiruv"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Bo‘lishish:"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Yig‘ish"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v11/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
+ <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Large.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
+ <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Medium.Inverse">
+ <item name="android:textColor">?android:attr/textColorSecondaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
+ <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Small.Inverse">
+ <item name="android:textColor">?android:attr/textColorTertiaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
+ <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Subhead.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
+ <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Title.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
+ <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v11/themes_base.xml -->
+ <eat-comment/>
+ <style name="Base.Theme.AppCompat.Dialog" parent="Base.V11.Theme.AppCompat.Dialog"/>
+ <style name="Base.Theme.AppCompat.Light.Dialog" parent="Base.V11.Theme.AppCompat.Light.Dialog"/>
+ <style name="Base.V11.Theme.AppCompat.Dialog" parent="Base.V7.Theme.AppCompat.Dialog">
+ <item name="android:buttonBarStyle">@style/Widget.AppCompat.ButtonBar.AlertDialog</item>
+ <item name="android:borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless</item>
+ <item name="android:windowCloseOnTouchOutside">@bool/abc_config_closeDialogWhenTouchOutside</item>
+ </style>
+ <style name="Base.V11.Theme.AppCompat.Light.Dialog" parent="Base.V7.Theme.AppCompat.Light.Dialog">
+ <item name="android:buttonBarStyle">@style/Widget.AppCompat.ButtonBar.AlertDialog</item>
+ <item name="android:borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless</item>
+ <item name="android:windowCloseOnTouchOutside">@bool/abc_config_closeDialogWhenTouchOutside</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v11/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.Widget.AppCompat.ProgressBar" parent="android:Widget.Holo.ProgressBar">
+ </style>
+ <style name="Base.Widget.AppCompat.ProgressBar.Horizontal" parent="android:Widget.Holo.ProgressBar.Horizontal">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v11/themes_base.xml -->
+ <eat-comment/>
+ <style name="Platform.AppCompat" parent="Platform.V11.AppCompat"/>
+ <style name="Platform.AppCompat.Light" parent="Platform.V11.AppCompat.Light"/>
+ <style name="Platform.V11.AppCompat" parent="android:Theme.Holo">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowActionBar">false</item>
+
+ <item name="android:buttonBarStyle">?attr/buttonBarStyle</item>
+ <item name="android:buttonBarButtonStyle">?attr/buttonBarButtonStyle</item>
+
+ <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
+
+ <!-- Window colors -->
+ <item name="android:colorForeground">@color/foreground_material_dark</item>
+ <item name="android:colorForegroundInverse">@color/foreground_material_light</item>
+ <item name="android:colorBackground">@color/background_material_dark</item>
+ <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_dark</item>
+ <item name="android:disabledAlpha">@dimen/abc_disabled_alpha_material_dark</item>
+ <item name="android:backgroundDimAmount">0.6</item>
+ <item name="android:windowBackground">@color/background_material_dark</item>
+
+ <!-- Text colors -->
+ <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
+ <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_light</item>
+ <item name="android:textColorPrimaryDisableOnly">@color/abc_primary_text_disable_only_material_dark</item>
+ <item name="android:textColorSecondary">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorSecondaryInverse">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorTertiary">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorTertiaryInverse">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorHint">@color/hint_foreground_material_dark</item>
+ <item name="android:textColorHintInverse">@color/hint_foreground_material_light</item>
+ <item name="android:textColorHighlight">@color/highlighted_text_material_dark</item>
+ <item name="android:textColorHighlightInverse">@color/highlighted_text_material_light</item>
+ <item name="android:textColorLink">?attr/colorAccent</item>
+ <item name="android:textColorLinkInverse">?attr/colorAccent</item>
+ <item name="android:textColorAlertDialogListItem">@color/abc_primary_text_material_dark</item>
+
+ <!-- Text styles -->
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
+ <item name="android:textAppearanceInverse">@style/TextAppearance.AppCompat.Inverse</item>
+ <item name="android:textAppearanceLarge">@style/TextAppearance.AppCompat.Large</item>
+ <item name="android:textAppearanceLargeInverse">@style/TextAppearance.AppCompat.Large.Inverse</item>
+ <item name="android:textAppearanceMedium">@style/TextAppearance.AppCompat.Medium</item>
+ <item name="android:textAppearanceMediumInverse">@style/TextAppearance.AppCompat.Medium.Inverse</item>
+ <item name="android:textAppearanceSmall">@style/TextAppearance.AppCompat.Small</item>
+ <item name="android:textAppearanceSmallInverse">@style/TextAppearance.AppCompat.Small.Inverse</item>
+
+ <item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
+ <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
+
+ <item name="android:actionModeCutDrawable">?actionModeCutDrawable</item>
+ <item name="android:actionModeCopyDrawable">?actionModeCopyDrawable</item>
+ <item name="android:actionModePasteDrawable">?actionModePasteDrawable</item>
+ </style>
+ <style name="Platform.V11.AppCompat.Light" parent="android:Theme.Holo.Light">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowActionBar">false</item>
+
+ <item name="android:buttonBarStyle">?attr/buttonBarStyle</item>
+ <item name="android:buttonBarButtonStyle">?attr/buttonBarButtonStyle</item>
+
+ <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
+
+ <!-- Window colors -->
+ <item name="android:colorForeground">@color/foreground_material_light</item>
+ <item name="android:colorForegroundInverse">@color/foreground_material_dark</item>
+ <item name="android:colorBackground">@color/background_material_light</item>
+ <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_light</item>
+ <item name="android:disabledAlpha">@dimen/abc_disabled_alpha_material_light</item>
+ <item name="android:backgroundDimAmount">0.6</item>
+ <item name="android:windowBackground">@color/background_material_light</item>
+
+ <!-- Text colors -->
+ <item name="android:textColorPrimary">@color/abc_primary_text_material_light</item>
+ <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_dark</item>
+ <item name="android:textColorSecondary">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorSecondaryInverse">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorTertiary">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorTertiaryInverse">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorPrimaryDisableOnly">@color/abc_primary_text_disable_only_material_light</item>
+ <item name="android:textColorPrimaryInverseDisableOnly">@color/abc_primary_text_disable_only_material_dark</item>
+ <item name="android:textColorHint">@color/hint_foreground_material_light</item>
+ <item name="android:textColorHintInverse">@color/hint_foreground_material_dark</item>
+ <item name="android:textColorHighlight">@color/highlighted_text_material_light</item>
+ <item name="android:textColorHighlightInverse">@color/highlighted_text_material_dark</item>
+ <item name="android:textColorLink">?attr/colorAccent</item>
+ <item name="android:textColorLinkInverse">?attr/colorAccent</item>
+ <item name="android:textColorAlertDialogListItem">@color/abc_primary_text_material_light</item>
+
+ <!-- Text styles -->
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
+ <item name="android:textAppearanceInverse">@style/TextAppearance.AppCompat.Inverse</item>
+ <item name="android:textAppearanceLarge">@style/TextAppearance.AppCompat.Large</item>
+ <item name="android:textAppearanceLargeInverse">@style/TextAppearance.AppCompat.Large.Inverse</item>
+ <item name="android:textAppearanceMedium">@style/TextAppearance.AppCompat.Medium</item>
+ <item name="android:textAppearanceMediumInverse">@style/TextAppearance.AppCompat.Medium.Inverse</item>
+ <item name="android:textAppearanceSmall">@style/TextAppearance.AppCompat.Small</item>
+ <item name="android:textAppearanceSmallInverse">@style/TextAppearance.AppCompat.Small.Inverse</item>
+
+ <item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
+ <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
+
+ <item name="android:actionModeCutDrawable">?actionModeCutDrawable</item>
+ <item name="android:actionModeCopyDrawable">?actionModeCopyDrawable</item>
+ <item name="android:actionModePasteDrawable">?actionModePasteDrawable</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v11/styles_base.xml -->
+ <eat-comment/>
+ <style name="Platform.Widget.AppCompat.Spinner" parent="android:Widget.Holo.Spinner"/>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-v11/themes_base.xml -->
- <eat-comment />
-
- <style name="Theme.Base" parent="android:Theme.Holo">
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowActionBar">false</item>
-
- <!--
- A native Action Mode could be displayed (for text selection, etc) so we need to ensure
- that it is positioned correctly, so we request windowActionModeOverlay so that it
- displays over the compat Action Bar.
- -->
- <item name="android:windowActionModeOverlay">true</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Dialog.FixedSize" parent="android:Theme.Holo.Dialog">
- <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
- <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
- <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
- <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
- <item name="windowActionBar">false</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Dialog.Light.FixedSize" parent="android:Theme.Holo.Light.Dialog">
- <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
- <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
- <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
- <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
- <item name="windowActionBar">false</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- </style>
-
- <style name="Theme.Base.Light" parent="android:Theme.Holo.Light">
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowActionBar">false</item>
-
- <!--
- A native Action Mode could be displayed (for text selection, etc) so we need to ensure
- that it is positioned correctly, so we request windowActionModeOverlay so that it
- displays over the compat Action Bar.
- -->
- <item name="android:windowActionModeOverlay">true</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- </style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-v11/styles_base.xml -->
- <eat-comment />
-
- <style name="Widget.AppCompat.Base.AutoCompleteTextView" parent="android:Widget.Holo.AutoCompleteTextView"></style>
-
- <style name="Widget.AppCompat.Base.ProgressBar" parent="android:Widget.Holo.ProgressBar"></style>
-
- <style name="Widget.AppCompat.Base.ProgressBar.Horizontal" parent="android:Widget.Holo.ProgressBar.Horizontal"></style>
-
- <style name="Widget.AppCompat.Light.Base.AutoCompleteTextView" parent="android:Widget.Holo.Light.AutoCompleteTextView"></style>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v12/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.V12.Widget.AppCompat.AutoCompleteTextView" parent="Base.V7.Widget.AppCompat.AutoCompleteTextView">
+ <item name="android:textCursorDrawable">@drawable/abc_text_cursor_material</item>
+ </style>
+ <style name="Base.V12.Widget.AppCompat.EditText" parent="Base.V7.Widget.AppCompat.EditText">
+ <item name="android:textCursorDrawable">@drawable/abc_text_cursor_material</item>
+ </style>
+ <style name="Base.Widget.AppCompat.AutoCompleteTextView" parent="Base.V12.Widget.AppCompat.AutoCompleteTextView"/>
+ <style name="Base.Widget.AppCompat.EditText" parent="Base.V12.Widget.AppCompat.EditText"/>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v14/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Button">
+ <item name="android:textSize">@dimen/abc_text_size_button_material</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v14/themes_base.xml -->
+ <eat-comment/>
+ <style name="Platform.AppCompat" parent="Platform.V14.AppCompat"/>
+ <style name="Platform.AppCompat.Light" parent="Platform.V14.AppCompat.Light"/>
+ <style name="Platform.V14.AppCompat" parent="Platform.V11.AppCompat">
+ <item name="android:actionModeSelectAllDrawable">?actionModeSelectAllDrawable</item>
+
+ <item name="android:listPreferredItemPaddingLeft">@dimen/abc_list_item_padding_horizontal_material</item>
+ <item name="android:listPreferredItemPaddingRight">@dimen/abc_list_item_padding_horizontal_material</item>
+ </style>
+ <style name="Platform.V14.AppCompat.Light" parent="Platform.V11.AppCompat.Light">
+ <item name="android:actionModeSelectAllDrawable">?actionModeSelectAllDrawable</item>
+
+ <item name="android:listPreferredItemPaddingLeft">@dimen/abc_list_item_padding_horizontal_material</item>
+ <item name="android:listPreferredItemPaddingRight">@dimen/abc_list_item_padding_horizontal_material</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v14/styles.xml -->
+ <eat-comment/>
+ <style name="TextAppearance.StatusBar.EventContent" parent="@android:style/TextAppearance.StatusBar.EventContent"/>
+ <style name="TextAppearance.StatusBar.EventContent.Info"/>
+ <style name="TextAppearance.StatusBar.EventContent.Line2">
+ <item name="android:textSize">@dimen/notification_subtext_size</item>
+ </style>
+ <style name="TextAppearance.StatusBar.EventContent.Time"/>
+ <style name="TextAppearance.StatusBar.EventContent.Title" parent="@android:style/TextAppearance.StatusBar.EventContent.Title"/>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-v14/styles_base.xml -->
- <eat-comment />
-
- <style name="TextAppearance.AppCompat.Base.SearchResult.Subtitle" parent="@android:TextAppearance.Holo.SearchResult.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Base.SearchResult.Title" parent="@android:TextAppearance.Holo.SearchResult.Title"></style>
-
- <style name="TextAppearance.AppCompat.Base.Widget.PopupMenu.Large" parent="android:TextAppearance.Holo.Widget.PopupMenu.Large"></style>
-
- <style name="TextAppearance.AppCompat.Base.Widget.PopupMenu.Small" parent="android:TextAppearance.Holo.Widget.PopupMenu.Small"></style>
-
- <style name="TextAppearance.AppCompat.Light.Base.SearchResult.Subtitle" parent="@android:TextAppearance.Holo.SearchResult.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Light.Base.SearchResult.Title" parent="@android:TextAppearance.Holo.SearchResult.Title"></style>
-
- <style name="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Large" parent="android:TextAppearance.Holo.Widget.PopupMenu.Large"></style>
-
- <style name="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Small" parent="android:TextAppearance.Holo.Widget.PopupMenu.Small"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Menu" parent="android:TextAppearance.Holo.Widget.ActionBar.Menu"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle" parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle.Inverse" parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title" parent="android:TextAppearance.Holo.Widget.ActionBar.Title"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title.Inverse" parent="android:TextAppearance.Holo.Widget.ActionBar.Title.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle" parent="android:TextAppearance.Holo.Widget.ActionMode.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle.Inverse" parent="android:TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title" parent="android:TextAppearance.Holo.Widget.ActionMode.Title"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title.Inverse" parent="android:TextAppearance.Holo.Widget.ActionMode.Title.Inverse"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-v14/themes_base.xml -->
- <eat-comment />
-
- <style name="Theme.Base.AppCompat" parent="android:Theme.Holo">
-
- <!-- Copy system flag values for our use -->
- <item name="windowActionBar">?android:attr/windowActionBar</item>
- <item name="actionBarSize">?android:attr/actionBarSize</item>
- <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
- <item name="dividerVertical">?android:attr/dividerVertical</item>
- <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
- <item name="actionBarWidgetTheme">@null</item>
- <item name="android:actionBarWidgetTheme">?attr/actionBarWidgetTheme</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
- <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeightLarge</item>
- <item name="listPreferredItemPaddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
- <item name="listPreferredItemPaddingRight">?android:attr/listPreferredItemPaddingRight</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- </style>
-
- <style name="Theme.Base.AppCompat.DialogWhenLarge" parent="Theme.Base.AppCompat.DialogWhenLarge.Base" />
-
- <style name="Theme.Base.AppCompat.DialogWhenLarge.Base" parent="android:Theme.Holo.DialogWhenLarge">
-
- <!-- Copy system flag values for our use -->
- <item name="windowActionBar">?android:attr/windowActionBar</item>
- <item name="actionBarSize">?android:attr/actionBarSize</item>
- <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
- <item name="dividerVertical">?android:attr/dividerVertical</item>
- <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
- <item name="actionBarWidgetTheme">@null</item>
- <item name="android:actionBarWidgetTheme">?attr/actionBarWidgetTheme</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
- <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeightLarge</item>
- <item name="listPreferredItemPaddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
- <item name="listPreferredItemPaddingRight">?android:attr/listPreferredItemPaddingRight</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Light" parent="android:Theme.Holo.Light">
-
- <!-- Copy system flag values for our use -->
- <item name="windowActionBar">?android:attr/windowActionBar</item>
- <item name="actionBarSize">?android:attr/actionBarSize</item>
- <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
- <item name="dividerVertical">?android:attr/dividerVertical</item>
- <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
- <item name="actionBarWidgetTheme">@null</item>
- <item name="android:actionBarWidgetTheme">?attr/actionBarWidgetTheme</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
- <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeightLarge</item>
- <item name="listPreferredItemPaddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
- <item name="listPreferredItemPaddingRight">?android:attr/listPreferredItemPaddingRight</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Light.DarkActionBar" parent="android:Theme.Holo.Light.DarkActionBar">
-
- <!-- Copy system flag values for our use -->
- <item name="windowActionBar">?android:attr/windowActionBar</item>
- <item name="actionBarSize">?android:attr/actionBarSize</item>
- <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
- <item name="dividerVertical">?android:attr/dividerVertical</item>
- <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
- <item name="actionBarWidgetTheme">@style/Theme.AppCompat</item>
- <item name="android:actionBarWidgetTheme">?attr/actionBarWidgetTheme</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
- <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeightLarge</item>
- <item name="listPreferredItemPaddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
- <item name="listPreferredItemPaddingRight">?android:attr/listPreferredItemPaddingRight</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Light.DialogWhenLarge" parent="Theme.Base.AppCompat.Light.DialogWhenLarge.Base" />
-
- <style name="Theme.Base.AppCompat.Light.DialogWhenLarge.Base" parent="android:Theme.Holo.Light.DialogWhenLarge">
-
- <!-- Copy system flag values for our use -->
- <item name="windowActionBar">?android:attr/windowActionBar</item>
- <item name="actionBarSize">?android:attr/actionBarSize</item>
- <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
- <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
- <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
- <item name="dividerVertical">?android:attr/dividerVertical</item>
- <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
- <item name="actionBarWidgetTheme">@null</item>
- <item name="android:actionBarWidgetTheme">?attr/actionBarWidgetTheme</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
- <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeightLarge</item>
- <item name="listPreferredItemPaddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
- <item name="listPreferredItemPaddingRight">?android:attr/listPreferredItemPaddingRight</item>
-
- <!-- Attributes populated from the framework to be read by apps -->
- <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
- </style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-v14/styles_base.xml -->
- <eat-comment />
-
- <style name="Widget.AppCompat.Base.ActionBar" parent="android:Widget.Holo.ActionBar"></style>
-
- <style name="Widget.AppCompat.Base.ActionBar.Solid" parent="android:Widget.Holo.ActionBar.Solid"></style>
-
- <style name="Widget.AppCompat.Base.ActionBar.TabBar" parent="android:Widget.Holo.ActionBar.TabBar"></style>
-
- <style name="Widget.AppCompat.Base.ActionBar.TabText" parent="android:Widget.Holo.ActionBar.TabText"></style>
-
- <style name="Widget.AppCompat.Base.ActionBar.TabView" parent="android:Widget.Holo.ActionBar.TabView"></style>
-
- <style name="Widget.AppCompat.Base.ActionButton" parent="android:Widget.Holo.ActionButton"></style>
-
- <style name="Widget.AppCompat.Base.ActionButton.CloseMode" parent="android:Widget.Holo.ActionButton.CloseMode"></style>
-
- <style name="Widget.AppCompat.Base.ActionButton.Overflow" parent="android:Widget.Holo.ActionButton.Overflow"></style>
-
- <style name="Widget.AppCompat.Base.ActivityChooserView" parent="">
- <item name="android:gravity">center</item>
- <item name="android:background">@drawable/abc_ab_share_pack_holo_dark</item>
- <item name="android:divider">?attr/dividerVertical</item>
- <item name="android:showDividers">middle</item>
- <item name="android:dividerPadding">6dip</item>
- </style>
-
- <style name="Widget.AppCompat.Base.DropDownItem.Spinner" parent="android:Widget.Holo.DropDownItem.Spinner" />
-
- <style name="Widget.AppCompat.Base.ListPopupWindow" parent="android:Widget.Holo.ListPopupWindow"></style>
-
- <style name="Widget.AppCompat.Base.ListView.DropDown" parent="android:Widget.Holo.ListView.DropDown" />
-
- <style name="Widget.AppCompat.Base.ListView.Menu" parent="android:Widget.ListView.Menu" />
-
- <style name="Widget.AppCompat.Base.PopupMenu" parent="android:Widget.Holo.PopupMenu"></style>
-
- <style name="Widget.AppCompat.Base.Spinner" parent="android:Widget.Holo.Spinner" />
-
- <style name="Widget.AppCompat.Light.Base.ActionBar" parent="android:Widget.Holo.Light.ActionBar"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.Solid" parent="android:Widget.Holo.Light.ActionBar.Solid"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.Solid.Inverse" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabBar" parent="android:Widget.Holo.Light.ActionBar.TabBar"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabBar.Inverse" parent="android:Widget.Holo.Light.ActionBar.TabBar.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabText" parent="android:Widget.Holo.Light.ActionBar.TabText"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabText.Inverse" parent="android:Widget.Holo.Light.ActionBar.TabText.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabView" parent="android:Widget.Holo.Light.ActionBar.TabView"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabView.Inverse" parent="android:Widget.Holo.Light.ActionBar.TabView.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionButton" parent="android:Widget.Holo.Light.ActionButton"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionButton.CloseMode" parent="android:Widget.Holo.Light.ActionButton.CloseMode"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionButton.Overflow" parent="android:Widget.Holo.Light.ActionButton.Overflow"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionMode.Inverse" parent="android:Widget.Holo.Light.ActionMode.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.Base.DropDownItem.Spinner" parent="android:Widget.Holo.Light.DropDownItem.Spinner" />
-
- <style name="Widget.AppCompat.Light.Base.ListPopupWindow" parent="android:Widget.Holo.Light.ListPopupWindow"></style>
-
- <style name="Widget.AppCompat.Light.Base.ListView.DropDown" parent="android:Widget.Holo.ListView.DropDown" />
-
- <style name="Widget.AppCompat.Light.Base.PopupMenu" parent="android:Widget.Holo.Light.PopupMenu"></style>
-
- <style name="Widget.AppCompat.Light.Base.Spinner" parent="android:Widget.Holo.Light.Spinner" />
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v17/styles_rtl.xml -->
+ <eat-comment/>
+ <style name="RtlOverlay.DialogWindowTitle.AppCompat" parent="Base.DialogWindowTitle.AppCompat">
+ <item name="android:textAlignment">viewStart</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.ActionBar.TitleItem" parent="android:Widget">
+ <item name="android:layout_gravity">center_vertical|start</item>
+ <item name="android:paddingEnd">8dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.DialogTitle.Icon" parent="android:Widget">
+ <item name="android:layout_marginEnd">8dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.PopupMenuItem" parent="android:Widget">
+ <item name="android:paddingEnd">16dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.PopupMenuItem.InternalGroup" parent="android:Widget">
+ <item name="android:layout_marginStart">16dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.PopupMenuItem.Text" parent="android:Widget">
+ <item name="android:layout_alignParentStart">true</item>
+ <item name="android:textAlignment">viewStart</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown" parent="android:Widget">
+ <item name="android:paddingStart">@dimen/abc_dropdownitem_text_padding_left</item>
+ <item name="android:paddingEnd">4dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Icon1" parent="android:Widget">
+ <item name="android:layout_alignParentStart">true</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Icon2" parent="android:Widget">
+ <item name="android:layout_toStartOf">@id/edit_query</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Query" parent="android:Widget">
+ <item name="android:layout_alignParentEnd">true</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Text" parent="Base.Widget.AppCompat.DropDownItem.Spinner">
+ <item name="android:layout_toStartOf">@android:id/icon2</item>
+ <item name="android:layout_toEndOf">@android:id/icon1</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.SearchView.MagIcon" parent="android:Widget">
+ <item name="android:layout_marginStart">@dimen/abc_dropdownitem_text_padding_left</item>
+ </style>
+ <style name="RtlUnderlay.Widget.AppCompat.ActionButton" parent="android:Widget">
+ <item name="android:paddingStart">12dp</item>
+ <item name="android:paddingEnd">12dp</item>
+ </style>
+ <style name="RtlUnderlay.Widget.AppCompat.ActionButton.Overflow" parent="Base.Widget.AppCompat.ActionButton">
+ <item name="android:paddingStart">@dimen/abc_action_bar_overflow_padding_start_material</item>
+ <item name="android:paddingEnd">@dimen/abc_action_bar_overflow_padding_end_material</item>
+ </style>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v18/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_switch_padding">0px</dimen>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat" parent="android:TextAppearance.Material"/>
+ <style name="Base.TextAppearance.AppCompat.Body1" parent="android:TextAppearance.Material.Body1"/>
+ <style name="Base.TextAppearance.AppCompat.Body2" parent="android:TextAppearance.Material.Body2"/>
+ <style name="Base.TextAppearance.AppCompat.Button" parent="android:TextAppearance.Material.Button"/>
+ <style name="Base.TextAppearance.AppCompat.Caption" parent="android:TextAppearance.Material.Caption"/>
+ <style name="Base.TextAppearance.AppCompat.Display1" parent="android:TextAppearance.Material.Display1"/>
+ <style name="Base.TextAppearance.AppCompat.Display2" parent="android:TextAppearance.Material.Display2"/>
+ <style name="Base.TextAppearance.AppCompat.Display3" parent="android:TextAppearance.Material.Display3"/>
+ <style name="Base.TextAppearance.AppCompat.Display4" parent="android:TextAppearance.Material.Display4"/>
+ <style name="Base.TextAppearance.AppCompat.Headline" parent="android:TextAppearance.Material.Headline"/>
+ <style name="Base.TextAppearance.AppCompat.Inverse" parent="android:TextAppearance.Material.Inverse"/>
+ <style name="Base.TextAppearance.AppCompat.Large" parent="android:TextAppearance.Material.Large"/>
+ <style name="Base.TextAppearance.AppCompat.Large.Inverse" parent="android:TextAppearance.Material.Large.Inverse"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Large" parent="android:TextAppearance.Material.Widget.PopupMenu.Large">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Small" parent="android:TextAppearance.Material.Widget.PopupMenu.Small">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Medium" parent="android:TextAppearance.Material.Medium"/>
+ <style name="Base.TextAppearance.AppCompat.Medium.Inverse" parent="android:TextAppearance.Material.Medium.Inverse"/>
+ <style name="Base.TextAppearance.AppCompat.Menu" parent="android:TextAppearance.Material.Menu"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.SearchResult.Subtitle" parent="android:TextAppearance.Material.SearchResult.Subtitle">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.SearchResult.Title" parent="android:TextAppearance.Material.SearchResult.Title">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Small" parent="android:TextAppearance.Material.Small"/>
+ <style name="Base.TextAppearance.AppCompat.Small.Inverse" parent="android:TextAppearance.Material.Small.Inverse"/>
+ <style name="Base.TextAppearance.AppCompat.Subhead" parent="android:TextAppearance.Material.Subhead"/>
+ <style name="Base.TextAppearance.AppCompat.Title" parent="android:TextAppearance.Material.Title"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Menu" parent="android:TextAppearance.Material.Widget.ActionBar.Menu">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Subtitle" parent="android:TextAppearance.Material.Widget.ActionBar.Subtitle">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse" parent="android:TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Title" parent="android:TextAppearance.Material.Widget.ActionBar.Title">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" parent="android:TextAppearance.Material.Widget.ActionBar.Title.Inverse">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionMode.Subtitle" parent="android:TextAppearance.Material.Widget.ActionMode.Subtitle">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionMode.Title" parent="android:TextAppearance.Material.Widget.ActionMode.Title">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.Button" parent="android:TextAppearance.Material.Widget.Button"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.PopupMenu.Large" parent="android:TextAppearance.Material.Widget.PopupMenu.Large">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.PopupMenu.Small" parent="android:TextAppearance.Material.Widget.PopupMenu.Small">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.Switch" parent="android:TextAppearance.Material.Button"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.TextView.SpinnerItem" parent="android:TextAppearance.Material.Widget.TextView.SpinnerItem"/>
+ <style name="Base.TextAppearance.Widget.AppCompat.Toolbar.Subtitle" parent="android:TextAppearance.Material.Widget.ActionBar.Subtitle">
+ </style>
+ <style name="Base.TextAppearance.Widget.AppCompat.Toolbar.Title" parent="android:TextAppearance.Material.Widget.ActionBar.Title">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/themes_base.xml -->
+ <eat-comment/>
+ <style name="Base.Theme.AppCompat" parent="Base.V21.Theme.AppCompat"/>
+ <style name="Base.Theme.AppCompat.Dialog" parent="Base.V21.Theme.AppCompat.Dialog"/>
+ <style name="Base.Theme.AppCompat.Light" parent="Base.V21.Theme.AppCompat.Light"/>
+ <style name="Base.Theme.AppCompat.Light.Dialog" parent="Base.V21.Theme.AppCompat.Light.Dialog"/>
+ <style name="Base.V21.Theme.AppCompat" parent="Base.V7.Theme.AppCompat">
+ <!-- Action Bar styling attributes -->
+ <item name="actionBarSize">?android:attr/actionBarSize</item>
+ <item name="actionBarDivider">?android:attr/actionBarDivider</item>
+ <item name="actionBarItemBackground">@drawable/abc_action_bar_item_background_material</item>
+ <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
+ <item name="actionModeBackground">?android:attr/actionModeBackground</item>
+ <item name="actionModeCloseDrawable">?android:attr/actionModeCloseDrawable</item>
+ <item name="actionOverflowButtonStyle">?android:attr/actionOverflowButtonStyle</item>
+ <item name="homeAsUpIndicator">?android:attr/homeAsUpIndicator</item>
+
+ <!-- For PopupMenu -->
+ <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
+ <item name="textAppearanceLargePopupMenu">?android:attr/textAppearanceLargePopupMenu</item>
+ <item name="textAppearanceSmallPopupMenu">?android:attr/textAppearanceSmallPopupMenu</item>
+
+ <!-- General view attributes -->
+ <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
+ <item name="selectableItemBackgroundBorderless">?android:attr/selectableItemBackgroundBorderless</item>
+ <item name="borderlessButtonStyle">?android:borderlessButtonStyle</item>
+ <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
+ <item name="dividerVertical">?android:attr/dividerVertical</item>
+ <item name="editTextBackground">?android:attr/editTextBackground</item>
+ <item name="editTextColor">?android:attr/editTextColor</item>
+ <item name="listChoiceBackgroundIndicator">?android:attr/listChoiceBackgroundIndicator</item>
+
+ <!-- Copy the platform default styles for the AppCompat widgets -->
+ <item name="buttonStyle">?android:attr/buttonStyle</item>
+ <item name="buttonStyleSmall">?android:attr/buttonStyleSmall</item>
+ <item name="checkboxStyle">?android:attr/checkboxStyle</item>
+ <item name="checkedTextViewStyle">?android:attr/checkedTextViewStyle</item>
+ <item name="radioButtonStyle">?android:attr/radioButtonStyle</item>
+ <item name="ratingBarStyle">?android:attr/ratingBarStyle</item>
+ <item name="spinnerStyle">?android:attr/spinnerStyle</item>
+
+ <!-- Copy our color theme attributes to the framework -->
+ <item name="android:colorPrimary">?attr/colorPrimary</item>
+ <item name="android:colorPrimaryDark">?attr/colorPrimaryDark</item>
+ <item name="android:colorAccent">?attr/colorAccent</item>
+ <item name="android:colorControlNormal">?attr/colorControlNormal</item>
+ <item name="android:colorControlActivated">?attr/colorControlActivated</item>
+ <item name="android:colorControlHighlight">?attr/colorControlHighlight</item>
+ <item name="android:colorButtonNormal">?attr/colorButtonNormal</item>
+ </style>
+ <style name="Base.V21.Theme.AppCompat.Dialog" parent="Base.V11.Theme.AppCompat.Dialog">
+ <item name="android:windowElevation">@dimen/abc_floating_window_z</item>
+ </style>
+ <style name="Base.V21.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light">
+ <!-- Action Bar styling attributes -->
+ <item name="actionBarSize">?android:attr/actionBarSize</item>
+ <item name="actionBarDivider">?android:attr/actionBarDivider</item>
+ <item name="actionBarItemBackground">@drawable/abc_action_bar_item_background_material</item>
+ <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
+ <item name="actionModeBackground">?android:attr/actionModeBackground</item>
+ <item name="actionModeCloseDrawable">?android:attr/actionModeCloseDrawable</item>
+ <item name="actionOverflowButtonStyle">?android:attr/actionOverflowButtonStyle</item>
+ <item name="homeAsUpIndicator">?android:attr/homeAsUpIndicator</item>
+
+ <!-- For PopupMenu -->
+ <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
+ <item name="textAppearanceLargePopupMenu">?android:attr/textAppearanceLargePopupMenu</item>
+ <item name="textAppearanceSmallPopupMenu">?android:attr/textAppearanceSmallPopupMenu</item>
+
+ <!-- General view attributes -->
+ <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
+ <item name="selectableItemBackgroundBorderless">?android:attr/selectableItemBackgroundBorderless</item>
+ <item name="borderlessButtonStyle">?android:borderlessButtonStyle</item>
+ <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
+ <item name="dividerVertical">?android:attr/dividerVertical</item>
+ <item name="editTextBackground">?android:attr/editTextBackground</item>
+ <item name="editTextColor">?android:attr/editTextColor</item>
+ <item name="listChoiceBackgroundIndicator">?android:attr/listChoiceBackgroundIndicator</item>
+
+ <!-- Copy the platform default styles for the AppCompat widgets -->
+ <item name="buttonStyle">?android:attr/buttonStyle</item>
+ <item name="buttonStyleSmall">?android:attr/buttonStyleSmall</item>
+ <item name="checkboxStyle">?android:attr/checkboxStyle</item>
+ <item name="checkedTextViewStyle">?android:attr/checkedTextViewStyle</item>
+ <item name="radioButtonStyle">?android:attr/radioButtonStyle</item>
+ <item name="ratingBarStyle">?android:attr/ratingBarStyle</item>
+ <item name="spinnerStyle">?android:attr/spinnerStyle</item>
+
+ <!-- Copy our color theme attributes to the framework -->
+ <item name="android:colorPrimary">?attr/colorPrimary</item>
+ <item name="android:colorPrimaryDark">?attr/colorPrimaryDark</item>
+ <item name="android:colorAccent">?attr/colorAccent</item>
+ <item name="android:colorControlNormal">?attr/colorControlNormal</item>
+ <item name="android:colorControlActivated">?attr/colorControlActivated</item>
+ <item name="android:colorControlHighlight">?attr/colorControlHighlight</item>
+ <item name="android:colorButtonNormal">?attr/colorButtonNormal</item>
+ </style>
+ <style name="Base.V21.Theme.AppCompat.Light.Dialog" parent="Base.V11.Theme.AppCompat.Light.Dialog">
+ <item name="android:windowElevation">@dimen/abc_floating_window_z</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.Widget.AppCompat.ActionBar.TabText" parent="android:Widget.Material.ActionBar.TabText">
+ </style>
+ <style name="Base.Widget.AppCompat.ActionBar.TabView" parent="android:Widget.Material.ActionBar.TabView">
+ </style>
+ <style name="Base.Widget.AppCompat.ActionButton" parent="android:Widget.Material.ActionButton">
+ </style>
+ <style name="Base.Widget.AppCompat.ActionButton.CloseMode" parent="android:Widget.Material.ActionButton.CloseMode">
+ <item name="android:minWidth">56dp</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ActionButton.Overflow" parent="android:Widget.Material.ActionButton.Overflow">
+ </style>
+ <style name="Base.Widget.AppCompat.AutoCompleteTextView" parent="android:Widget.Material.AutoCompleteTextView">
+ <item name="android:background">?attr/editTextBackground</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Button" parent="android:Widget.Material.Button"/>
+ <style name="Base.Widget.AppCompat.Button.Borderless" parent="android:Widget.Material.Button.Borderless"/>
+ <style name="Base.Widget.AppCompat.Button.Borderless.Colored" parent="android:Widget.Material.Button.Borderless.Colored"/>
+ <style name="Base.Widget.AppCompat.Button.Small" parent="android:Widget.Material.Button.Small"/>
+ <style name="Base.Widget.AppCompat.ButtonBar" parent="android:Widget.Material.ButtonBar"/>
+ <style name="Base.Widget.AppCompat.CompoundButton.CheckBox" parent="android:Widget.Material.CompoundButton.CheckBox"/>
+ <style name="Base.Widget.AppCompat.CompoundButton.RadioButton" parent="android:Widget.Material.CompoundButton.RadioButton"/>
+ <style name="Base.Widget.AppCompat.DropDownItem.Spinner" parent="android:Widget.Material.DropDownItem.Spinner"/>
+ <style name="Base.Widget.AppCompat.EditText" parent="android:Widget.Material.EditText">
+ <item name="android:background">?attr/editTextBackground</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ImageButton" parent="android:Widget.Material.ImageButton"/>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabText" parent="android:Widget.Material.Light.ActionBar.TabText">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabText.Inverse" parent="android:Widget.Material.Light.ActionBar.TabText">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabView" parent="android:Widget.Material.Light.ActionBar.TabView">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.PopupMenu" parent="android:Widget.Material.Light.PopupMenu">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.PopupMenu.Overflow">
+ <item name="android:dropDownHorizontalOffset">-4dip</item>
+ <item name="android:overlapAnchor">true</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ListPopupWindow" parent="android:Widget.Material.ListPopupWindow">
+ </style>
+ <style name="Base.Widget.AppCompat.ListView" parent="android:Widget.Material.ListView"/>
+ <style name="Base.Widget.AppCompat.ListView.DropDown" parent="android:Widget.Material.ListView.DropDown"/>
+ <style name="Base.Widget.AppCompat.ListView.Menu"/>
+ <style name="Base.Widget.AppCompat.PopupMenu" parent="android:Widget.Material.PopupMenu">
+ </style>
+ <style name="Base.Widget.AppCompat.PopupMenu.Overflow">
+ <item name="android:dropDownHorizontalOffset">-4dip</item>
+ <item name="android:overlapAnchor">true</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ProgressBar" parent="android:Widget.Material.ProgressBar">
+ </style>
+ <style name="Base.Widget.AppCompat.ProgressBar.Horizontal" parent="android:Widget.Material.ProgressBar.Horizontal">
+ </style>
+ <style name="Base.Widget.AppCompat.RatingBar" parent="android:Widget.Material.RatingBar"/>
+ <style name="Base.Widget.AppCompat.SeekBar" parent="android:Widget.Material.SeekBar"/>
+ <style name="Base.Widget.AppCompat.Spinner" parent="android:Widget.Material.Spinner"/>
+ <style name="Base.Widget.AppCompat.TextView.SpinnerItem" parent="android:Widget.Material.TextView.SpinnerItem"/>
+ <style name="Base.Widget.AppCompat.Toolbar.Button.Navigation" parent="android:Widget.Material.Toolbar.Button.Navigation">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v21/themes_base.xml -->
+ <eat-comment/>
+ <style name="Platform.AppCompat" parent="android:Theme.Material">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowActionBar">false</item>
+
+ <item name="android:buttonBarStyle">?attr/buttonBarStyle</item>
+ <item name="android:buttonBarButtonStyle">?attr/buttonBarButtonStyle</item>
+ </style>
+ <style name="Platform.AppCompat.Light" parent="android:Theme.Material.Light">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowActionBar">false</item>
+
+ <item name="android:buttonBarStyle">?attr/buttonBarStyle</item>
+ <item name="android:buttonBarButtonStyle">?attr/buttonBarButtonStyle</item>
+ </style>
+ <style name="Platform.ThemeOverlay.AppCompat" parent="">
+ <!-- Copy our color theme attributes to the framework -->
+ <item name="android:colorPrimary">?attr/colorPrimary</item>
+ <item name="android:colorPrimaryDark">?attr/colorPrimaryDark</item>
+ <item name="android:colorAccent">?attr/colorAccent</item>
+ <item name="android:colorControlNormal">?attr/colorControlNormal</item>
+ <item name="android:colorControlActivated">?attr/colorControlActivated</item>
+ <item name="android:colorControlHighlight">?attr/colorControlHighlight</item>
+ <item name="android:colorButtonNormal">?attr/colorButtonNormal</item>
+ </style>
+ <style name="Platform.ThemeOverlay.AppCompat.Dark"/>
+ <style name="Platform.ThemeOverlay.AppCompat.Light"/>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v22/themes_base.xml -->
+ <eat-comment/>
+ <style name="Base.Theme.AppCompat" parent="Base.V22.Theme.AppCompat"/>
+ <style name="Base.Theme.AppCompat.Light" parent="Base.V22.Theme.AppCompat.Light"/>
+ <style name="Base.V22.Theme.AppCompat" parent="Base.V21.Theme.AppCompat">
+ <item name="actionModeShareDrawable">?android:attr/actionModeShareDrawable</item>
+ </style>
+ <style name="Base.V22.Theme.AppCompat.Light" parent="Base.V21.Theme.AppCompat.Light">
+ <item name="actionModeShareDrawable">?android:attr/actionModeShareDrawable</item>
+ </style>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v23/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.Button.Inverse" parent="android:TextAppearance.Material.Widget.Button.Inverse"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v23/themes_base.xml -->
+ <eat-comment/>
+ <style name="Base.Theme.AppCompat" parent="Base.V23.Theme.AppCompat"/>
+ <style name="Base.Theme.AppCompat.Light" parent="Base.V23.Theme.AppCompat.Light"/>
+ <style name="Base.V23.Theme.AppCompat" parent="Base.V22.Theme.AppCompat">
+ <!-- We can use the platform drawable on v23+ -->
+ <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
+ <!-- We can use the platform styles on v23+ -->
+ <item name="actionMenuTextColor">?android:attr/actionMenuTextColor</item>
+ <item name="actionMenuTextAppearance">?android:attr/actionMenuTextAppearance</item>
+
+ <item name="controlBackground">@drawable/abc_control_background_material</item>
+ </style>
+ <style name="Base.V23.Theme.AppCompat.Light" parent="Base.V22.Theme.AppCompat.Light">
+ <!-- We can use the platform drawable on v23+ -->
+ <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
+ <!-- We can use the platform styles on v23+ -->
+ <item name="actionMenuTextColor">?android:attr/actionMenuTextColor</item>
+ <item name="actionMenuTextAppearance">?android:attr/actionMenuTextAppearance</item>
+
+ <item name="controlBackground">@drawable/abc_control_background_material</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-v23/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.Widget.AppCompat.Button.Colored" parent="android:Widget.Material.Button.Colored"/>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-vi/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Điều hướng về trang chủ"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Điều hướng lên trên"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Thêm tùy chọn"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Xong"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Xem tất cả"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Chọn một ứng dụng"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"TẮT"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"BẬT"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Tìm kiếm…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Xóa truy vấn"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Tìm kiếm truy vấn"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Tìm kiếm"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Gửi truy vấn"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Tìm kiếm bằng giọng nói"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Chia sẻ với"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Chia sẻ với %s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Thu gọn"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-vi/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Điều hướng về trang chủ"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Điều hướng lên trên"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Thêm tùy chọn"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Xong"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Xem tất cả"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Chọn một ứng dụng"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Xóa truy vấn"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Tìm kiếm truy vấn"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Tìm kiếm"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Gửi truy vấn"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Tìm kiếm bằng giọng nói"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Chia sẻ với"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Chia sẻ với %s"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-w360dp/dimens.xml -->
+ <eat-comment/>
+ <integer name="abc_max_action_buttons">3</integer>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w360dp/dimens.xml -->
- <eat-comment />
-
- <integer name="abc_max_action_buttons">3</integer>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-w480dp/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_embed_tabs_pre_jb">true</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-w480dp/config.xml -->
+ <eat-comment/>
+ <bool name="abc_config_allowActionMenuItemTextWithIcon">true</bool>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w480dp/bools.xml -->
- <eat-comment />
-
- <bool name="abc_action_bar_embed_tabs_pre_jb">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w480dp/config.xml -->
- <eat-comment />
-
- <bool name="abc_config_allowActionMenuItemTextWithIcon">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w480dp/bools.xml -->
- <eat-comment />
-
- <bool name="abc_split_action_bar_is_narrow">false</bool>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-w500dp/dimens.xml -->
+ <eat-comment/>
+ <integer name="abc_max_action_buttons">4</integer>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w500dp/dimens.xml -->
- <eat-comment />
-
- <integer name="abc_max_action_buttons">4</integer>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-w600dp/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_search_view_text_min_width">192dip</dimen>
+ <integer name="abc_max_action_buttons">5</integer>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w600dp/dimens.xml -->
- <eat-comment />
-
- <dimen name="abc_action_bar_default_height">56dip</dimen>
- <dimen name="abc_action_bar_icon_vertical_padding">4dip</dimen>
- <dimen name="abc_action_bar_subtitle_bottom_margin">9dip</dimen>
- <dimen name="abc_action_bar_subtitle_text_size">14dp</dimen>
- <dimen name="abc_action_bar_subtitle_top_margin">-3dp</dimen>
- <dimen name="abc_action_bar_title_text_size">18dp</dimen>
- <dimen name="abc_action_button_min_width">64dip</dimen>
- <dimen name="abc_search_view_text_min_width">192dip</dimen>
-
- <integer name="abc_max_action_buttons">5</integer>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-w720dp/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_expanded_action_views_exclusive">false</bool>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-w720dp/bools.xml -->
- <eat-comment />
-
- <bool name="abc_action_bar_expanded_action_views_exclusive">false</bool>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-xlarge-land/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_search_view_text_min_width">256dip</dimen>
+</resources>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-xlarge/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_expanded_action_views_exclusive">false</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-xlarge/dimens.xml -->
+ <eat-comment/>
+ <item name="abc_dialog_fixed_height_major" type="dimen">60%</item>
+ <item name="abc_dialog_fixed_height_minor" type="dimen">90%</item>
+ <item name="abc_dialog_fixed_width_major" type="dimen">50%</item>
+ <item name="abc_dialog_fixed_width_minor" type="dimen">70%</item>
+ <item name="abc_dialog_min_width_major" type="dimen">45%</item>
+ <item name="abc_dialog_min_width_minor" type="dimen">72%</item>
+ <dimen name="abc_search_view_text_min_width">192dip</dimen>
+ <integer name="abc_max_action_buttons">5</integer>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-xlarge/bools.xml -->
- <eat-comment />
-
- <bool name="abc_action_bar_expanded_action_views_exclusive">false</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-xlarge/dimens.xml -->
- <eat-comment />
-
- <dimen name="abc_action_bar_default_height">56dip</dimen>
- <dimen name="abc_action_bar_icon_vertical_padding">4dip</dimen>
- <dimen name="abc_action_bar_subtitle_bottom_margin">9dip</dimen>
- <dimen name="abc_action_bar_subtitle_text_size">14dp</dimen>
- <dimen name="abc_action_bar_subtitle_top_margin">-3dp</dimen>
- <dimen name="abc_action_bar_title_text_size">18dp</dimen>
- <dimen name="abc_action_button_min_width">64dip</dimen>
- <dimen name="abc_search_view_text_min_width">192dip</dimen>
-
- <item name="dialog_fixed_height_major" type="dimen">60%</item>
- <item name="dialog_fixed_height_minor" type="dimen">90%</item>
- <item name="dialog_fixed_width_major" type="dimen">50%</item>
- <item name="dialog_fixed_width_minor" type="dimen">70%</item>
-
- <integer name="abc_max_action_buttons">5</integer>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-zh-rCN/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"转到主屏幕"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s:%2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s - %2$s:%3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"转到上一层级"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"更多选项"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"完成"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"查看全部"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"选择应用"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"关闭"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"开启"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"搜索…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"清除查询"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"搜索查询"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"搜索"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"提交查询"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"语音搜索"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"分享方式"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"通过%s分享"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"收起"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-zh-rCN/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"转到主屏幕"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"转到上一层级"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"更多选项"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"完成"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"查看全部"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"选择应用"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"清除查询"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"搜索查询"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"搜索"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"提交查询"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"语音搜索"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"分享方式"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"通过%s分享"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-zh-rHK/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"瀏覽主頁"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s:%2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s (%2$s):%3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"向上瀏覽"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"更多選項"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"完成"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"顯示全部"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"選擇應用程式"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"關閉"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"開啟"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"搜尋…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"清除查詢"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"搜尋查詢"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"搜尋"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"提交查詢"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"語音搜尋"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"分享對象"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"與「%s」分享"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"收合"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999 +"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-zh-rHK/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"瀏覽主頁"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"向上瀏覽"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"更多選項"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"完成"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"顯示全部"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"選擇應用程式"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"清除查詢"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"搜尋查詢"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"搜尋"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"提交查詢"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"語音搜尋"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"分享對象"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"與「%s」分享"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-zh-rTW/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"瀏覽首頁"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s:%2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s - %2$s:%3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"向上瀏覽"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"更多選項"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"完成"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"查看全部"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"選擇應用程式"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"關閉"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"開啟"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"搜尋…"</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"清除查詢"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"搜尋查詢"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"搜尋"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"提交查詢"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"語音搜尋"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"選擇分享對象"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"與「%s」分享"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"收合"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-zh-rTW/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"瀏覽首頁"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"向上瀏覽"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"更多選項"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"完成"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"查看全部"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"選擇應用程式"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"清除查詢"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"搜尋查詢"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"搜尋"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"提交查詢"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"語音搜尋"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"選擇分享對象"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"與「%s」分享"</string>
-
-</resources>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values-zu/strings.xml -->
+ <eat-comment/>
+ <string msgid="4600421777120114993" name="abc_action_bar_home_description">"Zulazulela ekhaya"</string>
+ <string msgid="1397052879051804371" name="abc_action_bar_home_description_format">"%1$s, %2$s"</string>
+ <string msgid="6623331958280229229" name="abc_action_bar_home_subtitle_description_format">"%1$s, %2$s, %3$s"</string>
+ <string msgid="1594238315039666878" name="abc_action_bar_up_description">"Zulazulela phezulu"</string>
+ <string msgid="3588849162933574182" name="abc_action_menu_overflow_description">"Izinketho eziningi"</string>
+ <string msgid="4076576682505996667" name="abc_action_mode_done">"Kwenziwe"</string>
+ <string msgid="7468859129482906941" name="abc_activity_chooser_view_see_all">"Buka konke"</string>
+ <string msgid="2031811694353399454" name="abc_activitychooserview_choose_application">"Khetha uhlelo lokusebenza"</string>
+ <string msgid="121134116657445385" name="abc_capital_off">"VALIWE"</string>
+ <string msgid="3405795526292276155" name="abc_capital_on">"VULIWE"</string>
+ <string msgid="7723749260725869598" name="abc_search_hint">"Iyasesha..."</string>
+ <string msgid="3691816814315814921" name="abc_searchview_description_clear">"Sula inkinga"</string>
+ <string msgid="2550479030709304392" name="abc_searchview_description_query">"Umbuzo wosesho"</string>
+ <string msgid="8264924765203268293" name="abc_searchview_description_search">"Sesha"</string>
+ <string msgid="8928215447528550784" name="abc_searchview_description_submit">"Hambisa umbuzo"</string>
+ <string msgid="893419373245838918" name="abc_searchview_description_voice">"Ukusesha ngezwi"</string>
+ <string msgid="3421042268587513524" name="abc_shareactionprovider_share_with">"Yabelana no-"</string>
+ <string msgid="7165123711973476752" name="abc_shareactionprovider_share_with_application">"Yabelana no-%s"</string>
+ <string msgid="1603543279005712093" name="abc_toolbar_collapse_description">"Goqa"</string>
+ <string msgid="2869576371154716097" name="status_bar_notification_info_overflow">"999+"</string>
+</resources>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values-zu/strings.xml -->
- <eat-comment />
-
- <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Zulazulela ekhaya"</string>
- <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Zulazulela phezulu"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Izinketho eziningi"</string>
- <string name="abc_action_mode_done" msgid="4076576682505996667">"Kwenziwe"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Buka konke"</string>
- <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Khetha uhlelo lokusebenza"</string>
- <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Sula inkinga"</string>
- <string name="abc_searchview_description_query" msgid="2550479030709304392">"Umbuzo wosesho"</string>
- <string name="abc_searchview_description_search" msgid="8264924765203268293">"Sesha"</string>
- <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Hambisa umbuzo"</string>
- <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ukusesha ngezwi"</string>
- <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Yabelana no-"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Yabelana no-%s"</string>
-
-</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
-
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/attrs.xml -->
- <eat-comment />
-
- <attr name="actionBarDivider" format="reference" />
- <attr name="actionBarItemBackground" format="reference" />
- <attr name="actionBarSize" format="dimension" />
- <attr name="actionBarSplitStyle" format="reference" />
- <attr name="actionBarStyle" format="reference" />
- <attr name="actionBarTabBarStyle" format="reference" />
- <attr name="actionBarTabStyle" format="reference" />
- <attr name="actionBarTabTextStyle" format="reference" />
- <attr name="actionBarWidgetTheme" format="reference" />
- <attr name="actionButtonStyle" format="reference" />
- <attr name="actionMenuTextAppearance" format="reference" />
- <attr name="actionMenuTextColor" format="color|reference" />
- <attr name="actionModeBackground" format="reference" />
- <attr name="actionModeCloseButtonStyle" format="reference" />
- <attr name="actionModeCloseDrawable" format="reference" />
- <attr name="actionModeCopyDrawable" format="reference" />
- <attr name="actionModeCutDrawable" format="reference" />
- <attr name="actionModeFindDrawable" format="reference" />
- <attr name="actionModePasteDrawable" format="reference" />
- <attr name="actionModePopupWindowStyle" format="reference" />
- <attr name="actionModeSelectAllDrawable" format="reference" />
- <attr name="actionModeShareDrawable" format="reference" />
- <attr name="actionModeSplitBackground" format="reference" />
- <attr name="actionModeStyle" format="reference" />
- <attr name="actionModeWebSearchDrawable" format="reference" />
- <attr name="actionOverflowButtonStyle" format="reference" />
- <attr name="activityChooserViewStyle" format="reference" />
- <attr name="buttonBarButtonStyle" format="reference" />
- <attr name="buttonBarStyle" format="reference" />
- <attr name="dividerHorizontal" format="reference" />
- <attr name="dividerVertical" format="reference" />
- <attr name="dropDownListViewStyle" format="reference" />
- <attr name="height" format="dimension" />
- <attr name="homeAsUpIndicator" format="reference" />
- <attr name="isLightTheme" format="boolean" />
- <attr name="listPopupWindowStyle" format="reference" />
- <attr name="listPreferredItemHeight" format="dimension" />
- <attr name="listPreferredItemHeightLarge" format="dimension" />
- <attr name="listPreferredItemHeightSmall" format="dimension" />
- <attr name="listPreferredItemPaddingLeft" format="dimension" />
- <attr name="listPreferredItemPaddingRight" format="dimension" />
- <attr name="searchDropdownBackground" format="reference" />
- <attr name="searchResultListItemHeight" format="dimension" />
- <attr name="searchViewAutoCompleteTextView" format="reference" />
- <attr name="searchViewCloseIcon" format="reference" />
- <attr name="searchViewEditQuery" format="reference" />
- <attr name="searchViewEditQueryBackground" format="reference" />
- <attr name="searchViewGoIcon" format="reference" />
- <attr name="searchViewSearchIcon" format="reference" />
- <attr name="searchViewTextField" format="reference" />
- <attr name="searchViewTextFieldRight" format="reference" />
- <attr name="searchViewVoiceIcon" format="reference" />
- <attr name="selectableItemBackground" format="reference" />
- <attr name="spinnerDropDownItemStyle" format="reference" />
- <attr name="spinnerStyle" format="reference" />
- <attr name="textAppearanceLargePopupMenu" format="reference" />
- <attr name="textAppearanceListItem" format="reference" />
- <attr name="textAppearanceListItemSmall" format="reference" />
- <attr name="textAppearanceSearchResultSubtitle" format="reference" />
- <attr name="textAppearanceSearchResultTitle" format="reference" />
- <attr name="textAppearanceSmallPopupMenu" format="reference" />
- <attr name="textColorSearchUrl" format="reference|color" />
- <attr name="title" format="string" />
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/bools.xml -->
- <eat-comment />
-
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/attrs.xml -->
+ <eat-comment/>
+ <attr format="reference" name="drawerArrowStyle"/>
+ <attr format="dimension" name="height"/>
+ <attr format="boolean" name="isLightTheme"/>
+ <attr format="string" name="title"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/bools.xml -->
+ <eat-comment/>
+ <bool name="abc_action_bar_embed_tabs">true</bool>
<bool name="abc_action_bar_embed_tabs_pre_jb">false</bool>
<bool name="abc_action_bar_expanded_action_views_exclusive">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/config.xml -->
- <eat-comment />
-
+ <bool name="abc_allow_stacked_button_bar">false</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/config.xml -->
+ <eat-comment/>
<bool name="abc_config_actionMenuItemAllCaps">true</bool>
<bool name="abc_config_allowActionMenuItemTextWithIcon">false</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/bools.xml -->
- <eat-comment />
-
+ <bool name="abc_config_closeDialogWhenTouchOutside">true</bool>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/bools.xml -->
+ <eat-comment/>
<bool name="abc_config_showMenuShortcutsWhenKeyboardPresent">false</bool>
- <bool name="abc_split_action_bar_is_narrow">true</bool>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/colors.xml -->
- <eat-comment />
-
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/colors.xml -->
+ <eat-comment/>
+ <color name="abc_input_method_navigation_guard">@android:color/black</color>
<color name="abc_search_url_text_normal">#7fa87f</color>
<color name="abc_search_url_text_pressed">@android:color/black</color>
<color name="abc_search_url_text_selected">@android:color/black</color>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/attrs.xml -->
- <eat-comment />
-
- <declare-styleable name="ActionBar">
-
- <!-- The type of navigation to use. -->
- <attr name="navigationMode">
-
- <!-- Normal static title text -->
- <enum name="normal" value="0" />
- <!-- The action bar will use a selection list for navigation. -->
- <enum name="listMode" value="1" />
- <!-- The action bar will use a series of horizontal tabs for navigation. -->
- <enum name="tabMode" value="2" />
- </attr>
- <!-- Options affecting how the action bar is displayed. -->
- <attr name="displayOptions">
- <flag name="useLogo" value="0x1" />
- <flag name="showHome" value="0x2" />
- <flag name="homeAsUp" value="0x4" />
- <flag name="showTitle" value="0x8" />
- <flag name="showCustom" value="0x10" />
- <flag name="disableHome" value="0x20" />
- </attr>
- <!-- Specifies title text used for navigationMode="normal" -->
- <attr name="title" />
- <!-- Specifies subtitle text used for navigationMode="normal" -->
- <attr name="subtitle" format="string" />
- <!-- Specifies a style to use for title text. -->
- <attr name="titleTextStyle" format="reference" />
- <!-- Specifies a style to use for subtitle text. -->
- <attr name="subtitleTextStyle" format="reference" />
- <!-- Specifies the drawable used for the application icon. -->
- <attr name="icon" format="reference" />
- <!-- Specifies the drawable used for the application logo. -->
- <attr name="logo" format="reference" />
- <!-- Specifies the drawable used for item dividers. -->
- <attr name="divider" format="reference" />
- <!-- Specifies a background drawable for the action bar. -->
- <attr name="background" format="reference" />
- <!-- Specifies a background drawable for a second stacked row of the action bar. -->
- <attr name="backgroundStacked" format="reference|color" />
- <!-- Specifies a background drawable for the bottom component of a split action bar. -->
- <attr name="backgroundSplit" format="reference|color" />
- <!-- Specifies a layout for custom navigation. Overrides navigationMode. -->
- <attr name="customNavigationLayout" format="reference" />
- <!-- Specifies a fixed height. -->
- <attr name="height" />
- <!-- Specifies a layout to use for the "home" section of the action bar. -->
- <attr name="homeLayout" format="reference" />
- <!-- Specifies a style resource to use for an embedded progress bar. -->
- <attr name="progressBarStyle" format="reference" />
- <!-- Specifies a style resource to use for an indeterminate progress spinner. -->
- <attr name="indeterminateProgressStyle" format="reference" />
- <!-- Specifies the horizontal padding on either end for an embedded progress bar. -->
- <attr name="progressBarPadding" format="dimension" />
- <!--
- Specifies padding that should be applied to the left and right sides of
- system-provided items in the bar.
- -->
- <attr name="itemPadding" format="dimension" />
- </declare-styleable>
- <declare-styleable name="ActionBarLayout">
- <attr name="android:layout_gravity" />
- </declare-styleable>
- <declare-styleable name="ActionBarWindow">
- <attr name="windowActionBar" format="boolean" />
- <attr name="windowActionBarOverlay" format="boolean" />
- <attr name="windowSplitActionBar" format="boolean" />
-
- <!--
- A fixed width for the window along the major axis of the screen,
- that is, when in landscape. Can be either an absolute dimension
- or a fraction of the screen size in that dimension.
- -->
- <attr name="windowFixedWidthMajor" format="dimension|fraction" />
- <!--
- A fixed height for the window along the minor axis of the screen,
- that is, when in landscape. Can be either an absolute dimension
- or a fraction of the screen size in that dimension.
- -->
- <attr name="windowFixedHeightMinor" format="dimension|fraction" />
-
- <!--
- A fixed width for the window along the minor axis of the screen,
- that is, when in portrait. Can be either an absolute dimension
- or a fraction of the screen size in that dimension.
- -->
- <attr name="windowFixedWidthMinor" format="dimension|fraction" />
- <!--
- A fixed height for the window along the major axis of the screen,
- that is, when in portrait. Can be either an absolute dimension
- or a fraction of the screen size in that dimension.
- -->
- <attr name="windowFixedHeightMajor" format="dimension|fraction" />
- </declare-styleable>
- <declare-styleable name="ActionMenuItemView">
- <attr name="android:minWidth" />
- </declare-styleable>
- <declare-styleable name="ActionMenuView">
- <!-- Size of padding on either end of a divider. -->
- </declare-styleable>
- <declare-styleable name="ActionMode">
-
- <!-- Specifies a style to use for title text. -->
- <attr name="titleTextStyle" />
- <!-- Specifies a style to use for subtitle text. -->
- <attr name="subtitleTextStyle" />
- <!-- Specifies a background for the action mode bar. -->
- <attr name="background" />
- <!-- Specifies a background for the split action mode bar. -->
- <attr name="backgroundSplit" />
- <!-- Specifies a fixed height for the action mode bar. -->
- <attr name="height" />
- </declare-styleable>
- <declare-styleable name="ActivityChooserView">
-
- <!-- The maximal number of items initially shown in the activity list. -->
- <attr name="initialActivityCount" format="string" />
- <!--
- The drawable to show in the button for expanding the activities overflow popup.
- <strong>Note:</strong> Clients would like to set this drawable
- as a clue about the action the chosen activity will perform. For
- example, if share activity is to be chosen the drawable should
- give a clue that sharing is to be performed.
- -->
- <attr name="expandActivityOverflowButtonDrawable" format="reference" />
- </declare-styleable>
- <declare-styleable name="CompatTextView">
-
- <!-- Present the text in ALL CAPS. This may use a small-caps form when available. -->
- <attr name="textAllCaps" format="reference|boolean" />
- </declare-styleable>
- <declare-styleable name="LinearLayoutICS">
-
- <!-- Drawable to use as a vertical divider between buttons. -->
- <attr name="divider" />
- <!-- Setting for which dividers to show. -->
- <attr name="showDividers">
- <flag name="none" value="0" />
- <flag name="beginning" value="1" />
- <flag name="middle" value="2" />
- <flag name="end" value="4" />
- </attr>
- <!-- Size of padding on either end of a divider. -->
- <attr name="dividerPadding" format="dimension" />
- </declare-styleable>
- <declare-styleable name="MenuGroup">
-
- <!-- The ID of the group. -->
- <attr name="android:id" />
-
- <!--
- The category applied to all items within this group.
- (This will be or'ed with the orderInCategory attribute.)
- -->
- <attr name="android:menuCategory" />
-
- <!--
- The order within the category applied to all items within this group.
- (This will be or'ed with the category attribute.)
- -->
- <attr name="android:orderInCategory" />
-
- <!-- Whether the items are capable of displaying a check mark. -->
- <attr name="android:checkableBehavior" />
-
- <!-- Whether the items are shown/visible. -->
- <attr name="android:visible" />
-
- <!-- Whether the items are enabled. -->
- <attr name="android:enabled" />
- </declare-styleable>
- <declare-styleable name="MenuItem">
-
- <!-- The ID of the item. -->
- <attr name="android:id" />
-
- <!--
- The category applied to the item.
- (This will be or'ed with the orderInCategory attribute.)
- -->
- <attr name="android:menuCategory" />
-
- <!--
- The order within the category applied to the item.
- (This will be or'ed with the category attribute.)
- -->
- <attr name="android:orderInCategory" />
-
- <!-- The title associated with the item. -->
- <attr name="android:title" />
-
- <!--
- The condensed title associated with the item. This is used in situations where the
- normal title may be too long to be displayed.
- -->
- <attr name="android:titleCondensed" />
-
- <!--
- The icon associated with this item. This icon will not always be shown, so
- the title should be sufficient in describing this item.
- -->
- <attr name="android:icon" />
-
- <!--
- The alphabetic shortcut key. This is the shortcut when using a keyboard
- with alphabetic keys.
- -->
- <attr name="android:alphabeticShortcut" />
-
- <!--
- The numeric shortcut key. This is the shortcut when using a numeric (e.g., 12-key)
- keyboard.
- -->
- <attr name="android:numericShortcut" />
-
- <!-- Whether the item is capable of displaying a check mark. -->
- <attr name="android:checkable" />
-
- <!--
- Whether the item is checked. Note that you must first have enabled checking with
- the checkable attribute or else the check mark will not appear.
- -->
- <attr name="android:checked" />
-
- <!-- Whether the item is shown/visible. -->
- <attr name="android:visible" />
-
- <!-- Whether the item is enabled. -->
- <attr name="android:enabled" />
-
- <!--
- Name of a method on the Context used to inflate the menu that will be
- called when the item is clicked.
- -->
- <attr name="android:onClick" />
-
- <!-- How this item should display in the Action Bar, if present. -->
- <attr name="showAsAction">
-
- <!--
- Never show this item in an action bar, show it in the overflow menu instead.
- Mutually exclusive with "ifRoom" and "always".
- -->
- <flag name="never" value="0" />
- <!--
- Show this item in an action bar if there is room for it as determined
- by the system. Favor this option over "always" where possible.
- Mutually exclusive with "never" and "always".
- -->
- <flag name="ifRoom" value="1" />
- <!--
- Always show this item in an actionbar, even if it would override
- the system's limits of how much stuff to put there. This may make
- your action bar look bad on some screens. In most cases you should
- use "ifRoom" instead. Mutually exclusive with "ifRoom" and "never".
- -->
- <flag name="always" value="2" />
- <!--
- When this item is shown as an action in the action bar, show a text
- label with it even if it has an icon representation.
- -->
- <flag name="withText" value="4" />
- <!--
- This item's action view collapses to a normal menu
- item. When expanded, the action view takes over a
- larger segment of its container.
- -->
- <flag name="collapseActionView" value="8" />
- </attr>
-
- <!--
- An optional layout to be used as an action view.
- See {@link android.view.MenuItem#setActionView(android.view.View)}
- for more info.
- -->
- <attr name="actionLayout" format="reference" />
-
- <!--
- The name of an optional View class to instantiate and use as an
- action view. See {@link android.view.MenuItem#setActionView(android.view.View)}
- for more info.
- -->
- <attr name="actionViewClass" format="string" />
-
- <!--
- The name of an optional ActionProvider class to instantiate an action view
- and perform operations such as default action for that menu item.
- See {@link android.view.MenuItem#setActionProvider(android.view.ActionProvider)}
- for more info.
- -->
- <attr name="actionProviderClass" format="string" />
- </declare-styleable>
- <declare-styleable name="MenuView">
-
- <!-- Default appearance of menu item text. -->
- <attr name="android:itemTextAppearance" />
- <!-- Default horizontal divider between rows of menu items. -->
- <attr name="android:horizontalDivider" />
- <!-- Default vertical divider between menu items. -->
- <attr name="android:verticalDivider" />
- <!-- Default background for the menu header. -->
- <attr name="android:headerBackground" />
- <!-- Default background for each menu item. -->
- <attr name="android:itemBackground" />
- <!-- Default animations for the menu. -->
- <attr name="android:windowAnimationStyle" />
- <!-- Default disabled icon alpha for each menu item that shows an icon. -->
- <attr name="android:itemIconDisabledAlpha" />
- <!-- Whether space should be reserved in layout when an icon is missing. -->
- <attr name="android:preserveIconSpacing" />
- </declare-styleable>
- <declare-styleable name="SearchView">
-
- <!--
- The default state of the SearchView. If true, it will be iconified when not in
- use and expanded when clicked.
- -->
- <attr name="iconifiedByDefault" format="boolean" />
- <!-- An optional maximum width of the SearchView. -->
- <attr name="android:maxWidth" />
- <!-- An optional query hint string to be displayed in the empty query field. -->
- <attr name="queryHint" format="string" />
- <!-- The IME options to set on the query text field. -->
- <attr name="android:imeOptions" />
- <!-- The input type to set on the query text field. -->
- <attr name="android:inputType" />
- </declare-styleable>
- <declare-styleable name="Spinner">
-
- <!-- The prompt to display when the spinner's dialog is shown. -->
- <attr name="prompt" format="reference" />
- <!-- Display mode for spinner options. -->
- <attr name="spinnerMode" format="enum">
-
- <!-- Spinner options will be presented to the user as a dialog window. -->
- <enum name="dialog" value="0" />
- <!--
- Spinner options will be presented to the user as an inline dropdown
- anchored to the spinner widget itself.
- -->
- <enum name="dropdown" value="1" />
- </attr>
- <!-- List selector to use for spinnerMode="dropdown" display. -->
- <attr name="android:dropDownSelector" />
- <!-- Background drawable to use for the dropdown in spinnerMode="dropdown". -->
- <attr name="android:popupBackground" />
- <!--
- Vertical offset from the spinner widget for positioning the dropdown in
- spinnerMode="dropdown".
- -->
- <attr name="android:dropDownVerticalOffset" />
- <!--
- Horizontal offset from the spinner widget for positioning the dropdown
- in spinnerMode="dropdown".
- -->
- <attr name="android:dropDownHorizontalOffset" />
- <!-- Width of the dropdown in spinnerMode="dropdown". -->
- <attr name="android:dropDownWidth" />
- <!--
- Reference to a layout to use for displaying a prompt in the dropdown for
- spinnerMode="dropdown". This layout must contain a TextView with the id
- {@code @android:id/text1} to be populated with the prompt text.
- -->
- <attr name="popupPromptView" format="reference" />
- <!-- Gravity setting for positioning the currently selected item. -->
- <attr name="android:gravity" />
- <!--
- Whether this spinner should mark child views as enabled/disabled when
- the spinner itself is enabled/disabled.
- -->
- <attr name="disableChildrenWhenDisabled" format="boolean" />
- </declare-styleable>
- <declare-styleable name="Theme">
-
- <!-- Default ActionBar dropdown style. -->
- <attr name="actionDropDownStyle" format="reference" />
- <!-- The preferred item height for dropdown lists. -->
- <attr name="dropdownListPreferredItemHeight" format="dimension" />
- <!-- Default PopupMenu style. -->
- <attr name="popupMenuStyle" format="reference" />
-
- <!-- ============ -->
- <!-- Panel styles -->
- <!-- ============ -->
- <eat-comment />
-
- <!-- Default Panel Menu width. -->
- <attr name="panelMenuListWidth" format="dimension" />
-
- <!-- Default Panel Menu style. -->
- <attr name="panelMenuListTheme" format="reference" />
-
- <!-- Drawable used as a background for selected list items. -->
- <attr name="listChoiceBackgroundIndicator" format="reference" />
- </declare-styleable>
- <declare-styleable name="View">
-
- <!-- Sets the padding, in pixels, of the start edge; see {@link android.R.attr#padding}. -->
- <attr name="paddingStart" format="dimension" />
- <!-- Sets the padding, in pixels, of the end edge; see {@link android.R.attr#padding}. -->
- <attr name="paddingEnd" format="dimension" />
-
- <!--
- Boolean that controls whether a view can take focus. By default the user can not
- move focus to a view; by setting this attribute to true the view is
- allowed to take focus. This value does not impact the behavior of
- directly calling {@link android.view.View#requestFocus}, which will
- always request focus regardless of this view. It only impacts where
- focus navigation will try to move focus.
- -->
- <attr name="android:focusable" />
- </declare-styleable>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/dimens.xml -->
- <eat-comment />
-
- <dimen name="abc_action_bar_default_height">48dip</dimen>
- <dimen name="abc_action_bar_icon_vertical_padding">8dip</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/colors_material.xml -->
+ <eat-comment/>
+ <color name="accent_material_dark">@color/material_deep_teal_200</color>
+ <color name="accent_material_light">@color/material_deep_teal_500</color>
+ <color name="background_floating_material_dark">@color/material_grey_800</color>
+ <color name="background_floating_material_light">@android:color/white</color>
+ <color name="background_material_dark">@color/material_grey_850</color>
+ <color name="background_material_light">@color/material_grey_50</color>
+ <color name="bright_foreground_disabled_material_dark">#80ffffff</color>
+ <color name="bright_foreground_disabled_material_light">#80000000</color>
+ <color name="bright_foreground_inverse_material_dark">@color/bright_foreground_material_light</color>
+ <color name="bright_foreground_inverse_material_light">@color/bright_foreground_material_dark</color>
+ <color name="bright_foreground_material_dark">@android:color/white</color>
+ <color name="bright_foreground_material_light">@android:color/black</color>
+ <color name="button_material_dark">#ff5a595b</color>
+ <color name="button_material_light">#ffd6d7d7</color>
+ <color name="dim_foreground_disabled_material_dark">#80bebebe</color>
+ <color name="dim_foreground_disabled_material_light">#80323232</color>
+ <color name="dim_foreground_material_dark">#ffbebebe</color>
+ <color name="dim_foreground_material_light">#ff323232</color>
+ <color name="foreground_material_dark">@android:color/white</color>
+ <color name="foreground_material_light">@android:color/black</color>
+ <color name="highlighted_text_material_dark">#6680cbc4</color>
+ <color name="highlighted_text_material_light">#66009688</color>
+ <color name="hint_foreground_material_dark">@color/bright_foreground_disabled_material_dark</color>
+ <color name="hint_foreground_material_light">@color/bright_foreground_disabled_material_light</color>
+ <color name="material_blue_grey_800">#ff37474f</color>
+ <color name="material_blue_grey_900">#ff263238</color>
+ <color name="material_blue_grey_950">#ff21272b</color>
+ <color name="material_deep_teal_200">#ff80cbc4</color>
+ <color name="material_deep_teal_500">#ff009688</color>
+ <color name="material_grey_100">#fff5f5f5</color>
+ <color name="material_grey_300">#ffe0e0e0</color>
+ <color name="material_grey_50">#fffafafa</color>
+ <color name="material_grey_600">#ff757575</color>
+ <color name="material_grey_800">#ff424242</color>
+ <color name="material_grey_850">#ff303030</color>
+ <color name="material_grey_900">#ff212121</color>
+ <color name="primary_dark_material_dark">@android:color/black</color>
+ <color name="primary_dark_material_light">@color/material_grey_600</color>
+ <color name="primary_material_dark">@color/material_grey_900</color>
+ <color name="primary_material_light">@color/material_grey_100</color>
+ <color name="primary_text_default_material_dark">#ffffffff</color>
+ <color name="primary_text_default_material_light">#de000000</color>
+ <color name="primary_text_disabled_material_dark">#4Dffffff</color>
+ <color name="primary_text_disabled_material_light">#39000000</color>
+ <color name="ripple_material_dark">#33ffffff</color>
+ <color name="ripple_material_light">#1f000000</color>
+ <color name="secondary_text_default_material_dark">#b3ffffff</color>
+ <color name="secondary_text_default_material_light">#8a000000</color>
+ <color name="secondary_text_disabled_material_dark">#36ffffff</color>
+ <color name="secondary_text_disabled_material_light">#24000000</color>
+ <color name="switch_thumb_disabled_material_dark">#ff616161</color>
+ <color name="switch_thumb_disabled_material_light">#ffbdbdbd</color>
+ <color name="switch_thumb_normal_material_dark">#ffbdbdbd</color>
+ <color name="switch_thumb_normal_material_light">#fff1f1f1</color>
+ <declare-styleable name="ActionBar"><attr name="navigationMode"><enum name="normal" value="0"/><enum name="listMode" value="1"/><enum name="tabMode" value="2"/></attr><attr name="displayOptions"><flag name="none" value="0"/><flag name="useLogo" value="0x1"/><flag name="showHome" value="0x2"/><flag name="homeAsUp" value="0x4"/><flag name="showTitle" value="0x8"/><flag name="showCustom" value="0x10"/><flag name="disableHome" value="0x20"/></attr><attr name="title"/><attr format="string" name="subtitle"/><attr format="reference" name="titleTextStyle"/><attr format="reference" name="subtitleTextStyle"/><attr format="reference" name="icon"/><attr format="reference" name="logo"/><attr format="reference" name="divider"/><attr format="reference" name="background"/><attr format="reference|color" name="backgroundStacked"/><attr format="reference|color" name="backgroundSplit"/><attr format="reference" name="customNavigationLayout"/><attr name="height"/><attr format="reference" name="homeLayout"/><attr format="reference" name="progressBarStyle"/><attr format="reference" name="indeterminateProgressStyle"/><attr format="dimension" name="progressBarPadding"/><attr name="homeAsUpIndicator"/><attr format="dimension" name="itemPadding"/><attr format="boolean" name="hideOnContentScroll"/><attr format="dimension" name="contentInsetStart"/><attr format="dimension" name="contentInsetEnd"/><attr format="dimension" name="contentInsetLeft"/><attr format="dimension" name="contentInsetRight"/><attr format="dimension" name="elevation"/><attr format="reference" name="popupTheme"/></declare-styleable>
+ <declare-styleable name="ActionBarLayout"><attr name="android:layout_gravity"/></declare-styleable>
+ <declare-styleable name="ActionMenuItemView"><attr name="android:minWidth"/></declare-styleable>
+ <declare-styleable name="ActionMenuView"/>
+ <declare-styleable name="ActionMode"><attr name="titleTextStyle"/><attr name="subtitleTextStyle"/><attr name="background"/><attr name="backgroundSplit"/><attr name="height"/><attr format="reference" name="closeItemLayout"/></declare-styleable>
+ <declare-styleable name="ActivityChooserView"><attr format="string" name="initialActivityCount"/><attr format="reference" name="expandActivityOverflowButtonDrawable"/></declare-styleable>
+ <declare-styleable name="AlertDialog"><attr name="android:layout"/><attr format="reference" name="buttonPanelSideLayout"/><attr format="reference" name="listLayout"/><attr format="reference" name="multiChoiceItemLayout"/><attr format="reference" name="singleChoiceItemLayout"/><attr format="reference" name="listItemLayout"/></declare-styleable>
+ <declare-styleable name="AppCompatTextView"><attr format="reference|boolean" name="textAllCaps"/><attr name="android:textAppearance"/></declare-styleable>
+ <declare-styleable name="ButtonBarLayout"><attr format="boolean" name="allowStacking"/></declare-styleable>
+ <declare-styleable name="CompoundButton"><attr name="android:button"/><attr format="color" name="buttonTint"/><attr name="buttonTintMode"><enum name="src_over" value="3"/><enum name="src_in" value="5"/><enum name="src_atop" value="9"/><enum name="multiply" value="14"/><enum name="screen" value="15"/></attr></declare-styleable>
+ <declare-styleable name="DrawerArrowToggle"><attr format="color" name="color"/><attr format="boolean" name="spinBars"/><attr format="dimension" name="drawableSize"/><attr format="dimension" name="gapBetweenBars"/><attr format="dimension" name="arrowHeadLength"/><attr format="dimension" name="arrowShaftLength"/><attr format="dimension" name="barLength"/><attr format="dimension" name="thickness"/></declare-styleable>
+ <declare-styleable name="LinearLayoutCompat"><attr name="android:orientation"/><attr name="android:gravity"/><attr name="android:baselineAligned"/><attr name="android:baselineAlignedChildIndex"/><attr name="android:weightSum"/><attr format="boolean" name="measureWithLargestChild"/><attr name="divider"/><attr name="showDividers"><flag name="none" value="0"/><flag name="beginning" value="1"/><flag name="middle" value="2"/><flag name="end" value="4"/></attr><attr format="dimension" name="dividerPadding"/></declare-styleable>
+ <declare-styleable name="LinearLayoutCompat_Layout"><attr name="android:layout_width"/><attr name="android:layout_height"/><attr name="android:layout_weight"/><attr name="android:layout_gravity"/></declare-styleable>
+ <declare-styleable name="ListPopupWindow"><attr name="android:dropDownVerticalOffset"/><attr name="android:dropDownHorizontalOffset"/></declare-styleable>
+ <declare-styleable name="MenuGroup"><attr name="android:id"/><attr name="android:menuCategory"/><attr name="android:orderInCategory"/><attr name="android:checkableBehavior"/><attr name="android:visible"/><attr name="android:enabled"/></declare-styleable>
+ <declare-styleable name="MenuItem"><attr name="android:id"/><attr name="android:menuCategory"/><attr name="android:orderInCategory"/><attr name="android:title"/><attr name="android:titleCondensed"/><attr name="android:icon"/><attr name="android:alphabeticShortcut"/><attr name="android:numericShortcut"/><attr name="android:checkable"/><attr name="android:checked"/><attr name="android:visible"/><attr name="android:enabled"/><attr name="android:onClick"/><attr name="showAsAction"><flag name="never" value="0"/><flag name="ifRoom" value="1"/><flag name="always" value="2"/><flag name="withText" value="4"/><flag name="collapseActionView" value="8"/></attr><attr format="reference" name="actionLayout"/><attr format="string" name="actionViewClass"/><attr format="string" name="actionProviderClass"/></declare-styleable>
+ <declare-styleable name="MenuView"><attr name="android:itemTextAppearance"/><attr name="android:horizontalDivider"/><attr name="android:verticalDivider"/><attr name="android:headerBackground"/><attr name="android:itemBackground"/><attr name="android:windowAnimationStyle"/><attr name="android:itemIconDisabledAlpha"/><attr format="boolean" name="preserveIconSpacing"/></declare-styleable>
+ <declare-styleable name="PopupWindow"><attr format="boolean" name="overlapAnchor"/><attr name="android:popupBackground"/></declare-styleable>
+ <declare-styleable name="PopupWindowBackgroundState"><attr format="boolean" name="state_above_anchor"/></declare-styleable>
+ <declare-styleable name="SearchView"><attr format="reference" name="layout"/><attr format="boolean" name="iconifiedByDefault"/><attr name="android:maxWidth"/><attr format="string" name="queryHint"/><attr format="string" name="defaultQueryHint"/><attr name="android:imeOptions"/><attr name="android:inputType"/><attr format="reference" name="closeIcon"/><attr format="reference" name="goIcon"/><attr format="reference" name="searchIcon"/><attr format="reference" name="searchHintIcon"/><attr format="reference" name="voiceIcon"/><attr format="reference" name="commitIcon"/><attr format="reference" name="suggestionRowLayout"/><attr format="reference" name="queryBackground"/><attr format="reference" name="submitBackground"/><attr name="android:focusable"/></declare-styleable>
+ <declare-styleable name="Spinner"><attr name="android:prompt"/><attr name="popupTheme"/><attr name="android:popupBackground"/><attr name="android:dropDownWidth"/></declare-styleable>
+ <declare-styleable name="SwitchCompat"><attr name="android:thumb"/><attr format="reference" name="track"/><attr name="android:textOn"/><attr name="android:textOff"/><attr format="dimension" name="thumbTextPadding"/><attr format="reference" name="switchTextAppearance"/><attr format="dimension" name="switchMinWidth"/><attr format="dimension" name="switchPadding"/><attr format="boolean" name="splitTrack"/><attr format="boolean" name="showText"/></declare-styleable>
+ <declare-styleable name="TextAppearance"><attr name="android:textSize"/><attr name="android:textColor"/><attr name="android:textStyle"/><attr name="android:typeface"/><attr name="textAllCaps"/><attr name="android:shadowColor"/><attr name="android:shadowDy"/><attr name="android:shadowDx"/><attr name="android:shadowRadius"/></declare-styleable>
+ <declare-styleable name="Theme"><attr format="boolean" name="windowActionBar"/><attr format="boolean" name="windowNoTitle"/><attr format="boolean" name="windowActionBarOverlay"/><attr format="boolean" name="windowActionModeOverlay"/><attr format="dimension|fraction" name="windowFixedWidthMajor"/><attr format="dimension|fraction" name="windowFixedHeightMinor"/><attr format="dimension|fraction" name="windowFixedWidthMinor"/><attr format="dimension|fraction" name="windowFixedHeightMajor"/><attr format="dimension|fraction" name="windowMinWidthMajor"/><attr format="dimension|fraction" name="windowMinWidthMinor"/><attr name="android:windowIsFloating"/><attr name="android:windowAnimationStyle"/><attr format="reference" name="actionBarTabStyle"/><attr format="reference" name="actionBarTabBarStyle"/><attr format="reference" name="actionBarTabTextStyle"/><attr format="reference" name="actionOverflowButtonStyle"/><attr format="reference" name="actionOverflowMenuStyle"/><attr format="reference" name="actionBarPopupTheme"/><attr format="reference" name="actionBarStyle"/><attr format="reference" name="actionBarSplitStyle"/><attr format="reference" name="actionBarTheme"/><attr format="reference" name="actionBarWidgetTheme"/><attr format="dimension" name="actionBarSize"><enum name="wrap_content" value="0"/></attr><attr format="reference" name="actionBarDivider"/><attr format="reference" name="actionBarItemBackground"/><attr format="reference" name="actionMenuTextAppearance"/><attr format="color|reference" name="actionMenuTextColor"/><attr format="reference" name="actionModeStyle"/><attr format="reference" name="actionModeCloseButtonStyle"/><attr format="reference" name="actionModeBackground"/><attr format="reference" name="actionModeSplitBackground"/><attr format="reference" name="actionModeCloseDrawable"/><attr format="reference" name="actionModeCutDrawable"/><attr format="reference" name="actionModeCopyDrawable"/><attr format="reference" name="actionModePasteDrawable"/><attr format="reference" name="actionModeSelectAllDrawable"/><attr format="reference" name="actionModeShareDrawable"/><attr format="reference" name="actionModeFindDrawable"/><attr format="reference" name="actionModeWebSearchDrawable"/><attr format="reference" name="actionModePopupWindowStyle"/><attr format="reference" name="textAppearanceLargePopupMenu"/><attr format="reference" name="textAppearanceSmallPopupMenu"/><attr format="reference" name="dialogTheme"/><attr format="dimension" name="dialogPreferredPadding"/><attr format="reference" name="listDividerAlertDialog"/><attr format="reference" name="actionDropDownStyle"/><attr format="dimension" name="dropdownListPreferredItemHeight"/><attr format="reference" name="spinnerDropDownItemStyle"/><attr format="reference" name="homeAsUpIndicator"/><attr format="reference" name="actionButtonStyle"/><attr format="reference" name="buttonBarStyle"/><attr format="reference" name="buttonBarButtonStyle"/><attr format="reference" name="selectableItemBackground"/><attr format="reference" name="selectableItemBackgroundBorderless"/><attr format="reference" name="borderlessButtonStyle"/><attr format="reference" name="dividerVertical"/><attr format="reference" name="dividerHorizontal"/><attr format="reference" name="activityChooserViewStyle"/><attr format="reference" name="toolbarStyle"/><attr format="reference" name="toolbarNavigationButtonStyle"/><attr format="reference" name="popupMenuStyle"/><attr format="reference" name="popupWindowStyle"/><attr format="reference|color" name="editTextColor"/><attr format="reference" name="editTextBackground"/><attr format="reference" name="imageButtonStyle"/><attr format="reference" name="textAppearanceSearchResultTitle"/><attr format="reference" name="textAppearanceSearchResultSubtitle"/><attr format="reference|color" name="textColorSearchUrl"/><attr format="reference" name="searchViewStyle"/><attr format="dimension" name="listPreferredItemHeight"/><attr format="dimension" name="listPreferredItemHeightSmall"/><attr format="dimension" name="listPreferredItemHeightLarge"/><attr format="dimension" name="listPreferredItemPaddingLeft"/><attr format="dimension" name="listPreferredItemPaddingRight"/><attr format="reference" name="dropDownListViewStyle"/><attr format="reference" name="listPopupWindowStyle"/><attr format="reference" name="textAppearanceListItem"/><attr format="reference" name="textAppearanceListItemSmall"/><attr format="reference" name="panelBackground"/><attr format="dimension" name="panelMenuListWidth"/><attr format="reference" name="panelMenuListTheme"/><attr format="reference" name="listChoiceBackgroundIndicator"/><attr format="color" name="colorPrimary"/><attr format="color" name="colorPrimaryDark"/><attr format="color" name="colorAccent"/><attr format="color" name="colorControlNormal"/><attr format="color" name="colorControlActivated"/><attr format="color" name="colorControlHighlight"/><attr format="color" name="colorButtonNormal"/><attr format="color" name="colorSwitchThumbNormal"/><attr format="reference" name="controlBackground"/><attr format="reference" name="alertDialogStyle"/><attr format="reference" name="alertDialogButtonGroupStyle"/><attr format="boolean" name="alertDialogCenterButtons"/><attr format="reference" name="alertDialogTheme"/><attr format="reference|color" name="textColorAlertDialogListItem"/><attr format="reference" name="buttonBarPositiveButtonStyle"/><attr format="reference" name="buttonBarNegativeButtonStyle"/><attr format="reference" name="buttonBarNeutralButtonStyle"/><attr format="reference" name="autoCompleteTextViewStyle"/><attr format="reference" name="buttonStyle"/><attr format="reference" name="buttonStyleSmall"/><attr format="reference" name="checkboxStyle"/><attr format="reference" name="checkedTextViewStyle"/><attr format="reference" name="editTextStyle"/><attr format="reference" name="radioButtonStyle"/><attr format="reference" name="ratingBarStyle"/><attr format="reference" name="seekBarStyle"/><attr format="reference" name="spinnerStyle"/><attr format="reference" name="switchStyle"/></declare-styleable>
+ <declare-styleable name="Toolbar"><attr format="reference" name="titleTextAppearance"/><attr format="reference" name="subtitleTextAppearance"/><attr name="title"/><attr name="subtitle"/><attr name="android:gravity"/><attr format="dimension" name="titleMargins"/><attr format="dimension" name="titleMarginStart"/><attr format="dimension" name="titleMarginEnd"/><attr format="dimension" name="titleMarginTop"/><attr format="dimension" name="titleMarginBottom"/><attr name="contentInsetStart"/><attr name="contentInsetEnd"/><attr name="contentInsetLeft"/><attr name="contentInsetRight"/><attr format="dimension" name="maxButtonHeight"/><attr format="reference" name="collapseIcon"/><attr format="string" name="collapseContentDescription"/><attr name="popupTheme"/><attr format="reference" name="navigationIcon"/><attr format="string" name="navigationContentDescription"/><attr name="android:minHeight"/><attr name="logo"/><attr format="string" name="logoDescription"/><attr format="color" name="titleTextColor"/><attr format="color" name="subtitleTextColor"/></declare-styleable>
+ <declare-styleable name="View"><attr format="dimension" name="paddingStart"/><attr format="dimension" name="paddingEnd"/><attr name="android:focusable"/><attr format="reference" name="theme"/><attr name="android:theme"/></declare-styleable>
+ <declare-styleable name="ViewBackgroundHelper"><attr name="android:background"/><attr format="color" name="backgroundTint"/><attr name="backgroundTintMode"><enum name="src_over" value="3"/><enum name="src_in" value="5"/><enum name="src_atop" value="9"/><enum name="multiply" value="14"/><enum name="screen" value="15"/></attr></declare-styleable>
+ <declare-styleable name="ViewStubCompat"><attr name="android:layout"/><attr name="android:inflatedId"/><attr name="android:id"/></declare-styleable>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_action_bar_content_inset_material">16dp</dimen>
+ <dimen name="abc_action_bar_default_height_material">56dp</dimen>
+ <dimen name="abc_action_bar_default_padding_end_material">0dp</dimen>
+ <dimen name="abc_action_bar_default_padding_start_material">0dp</dimen>
+ <dimen name="abc_action_bar_icon_vertical_padding_material">16dp</dimen>
+ <dimen name="abc_action_bar_overflow_padding_end_material">10dp</dimen>
+ <dimen name="abc_action_bar_overflow_padding_start_material">6dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
<dimen name="abc_action_bar_progress_bar_size">40dp</dimen>
<dimen name="abc_action_bar_stacked_max_height">48dp</dimen>
<dimen name="abc_action_bar_stacked_tab_max_width">180dp</dimen>
- <dimen name="abc_action_bar_subtitle_bottom_margin">5dip</dimen>
- <dimen name="abc_action_bar_subtitle_text_size">14dp</dimen>
- <dimen name="abc_action_bar_subtitle_top_margin">-3dp</dimen>
- <dimen name="abc_action_bar_title_text_size">18dp</dimen>
- <dimen name="abc_action_button_min_width">56dip</dimen>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/config.xml -->
- <eat-comment />
-
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_action_bar_subtitle_bottom_margin_material">5dp</dimen>
+ <dimen name="abc_action_bar_subtitle_top_margin_material">-3dp</dimen>
+ <dimen name="abc_action_button_min_height_material">48dp</dimen>
+ <dimen name="abc_action_button_min_width_material">48dp</dimen>
+ <dimen name="abc_action_button_min_width_overflow_material">36dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_alert_dialog_button_bar_height">48dp</dimen>
+ <dimen name="abc_button_inset_horizontal_material">@dimen/abc_control_inset_material</dimen>
+ <dimen name="abc_button_inset_vertical_material">6dp</dimen>
+ <dimen name="abc_button_padding_horizontal_material">8dp</dimen>
+ <dimen name="abc_button_padding_vertical_material">@dimen/abc_control_padding_material</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/config.xml -->
+ <eat-comment/>
<dimen name="abc_config_prefDialogWidth">320dp</dimen>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/dimens.xml -->
- <eat-comment />
-
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_control_corner_material">2dp</dimen>
+ <dimen name="abc_control_inset_material">4dp</dimen>
+ <dimen name="abc_control_padding_material">4dp</dimen>
+ <item name="abc_dialog_fixed_height_major" type="dimen">80%</item>
+ <item name="abc_dialog_fixed_height_minor" type="dimen">100%</item>
+ <item name="abc_dialog_fixed_width_major" type="dimen">320dp</item>
+ <item name="abc_dialog_fixed_width_minor" type="dimen">320dp</item>
+ <dimen name="abc_dialog_list_padding_vertical_material">8dp</dimen>
+ <item name="abc_dialog_min_width_major" type="dimen">65%</item>
+ <item name="abc_dialog_min_width_minor" type="dimen">95%</item>
+ <dimen name="abc_dialog_padding_material">24dp</dimen>
+ <dimen name="abc_dialog_padding_top_material">18dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens_material.xml -->
+ <eat-comment/>
+ <item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item>
+ <item format="float" name="abc_disabled_alpha_material_light" type="dimen">0.26</item>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
<dimen name="abc_dropdownitem_icon_width">32dip</dimen>
<dimen name="abc_dropdownitem_text_padding_left">8dip</dimen>
<dimen name="abc_dropdownitem_text_padding_right">8dip</dimen>
+ <dimen name="abc_edit_text_inset_bottom_material">7dp</dimen>
+ <dimen name="abc_edit_text_inset_horizontal_material">4dp</dimen>
+ <dimen name="abc_edit_text_inset_top_material">10dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_floating_window_z">16dp</dimen>
+ <dimen name="abc_list_item_padding_horizontal_material">@dimen/abc_action_bar_content_inset_material</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
<dimen name="abc_panel_menu_list_width">296dp</dimen>
<dimen name="abc_search_view_preferred_width">320dip</dimen>
<dimen name="abc_search_view_text_min_width">160dip</dimen>
-
- <item name="dialog_fixed_height_major" type="dimen">80%</item>
- <item name="dialog_fixed_height_minor" type="dimen">100%</item>
- <item name="dialog_fixed_width_major" type="dimen">320dp</item>
- <item name="dialog_fixed_width_minor" type="dimen">320dp</item>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/ids.xml -->
- <eat-comment />
-
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_seekbar_track_background_height_material">2dp</dimen>
+ <dimen name="abc_seekbar_track_progress_height_material">2dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
+ <dimen name="abc_select_dialog_padding_start_material">20dp</dimen>
+ <dimen name="abc_switch_padding">3dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens_material.xml -->
+ <eat-comment/>
+ <dimen name="abc_text_size_body_1_material">14sp</dimen>
+ <dimen name="abc_text_size_body_2_material">14sp</dimen>
+ <dimen name="abc_text_size_button_material">14sp</dimen>
+ <dimen name="abc_text_size_caption_material">12sp</dimen>
+ <dimen name="abc_text_size_display_1_material">34sp</dimen>
+ <dimen name="abc_text_size_display_2_material">45sp</dimen>
+ <dimen name="abc_text_size_display_3_material">56sp</dimen>
+ <dimen name="abc_text_size_display_4_material">112sp</dimen>
+ <dimen name="abc_text_size_headline_material">24sp</dimen>
+ <dimen name="abc_text_size_large_material">22sp</dimen>
+ <dimen name="abc_text_size_medium_material">18sp</dimen>
+ <dimen name="abc_text_size_menu_material">16sp</dimen>
+ <dimen name="abc_text_size_small_material">14sp</dimen>
+ <dimen name="abc_text_size_subhead_material">16sp</dimen>
+ <dimen name="abc_text_size_subtitle_material_toolbar">16dp</dimen>
+ <dimen name="abc_text_size_title_material">20sp</dimen>
+ <dimen name="abc_text_size_title_material_toolbar">20dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/colors_material.xml -->
+ <eat-comment/>
+ <item format="float" name="disabled_alpha_material_dark" type="dimen">0.30</item>
+ <item format="float" name="disabled_alpha_material_light" type="dimen">0.26</item>
+ <item format="float" name="highlight_alpha_material_colored" type="dimen">0.26</item>
+ <item format="float" name="highlight_alpha_material_dark" type="dimen">0.20</item>
+ <item format="float" name="highlight_alpha_material_light" type="dimen">0.12</item>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
+ <dimen name="notification_large_icon_height">64dp</dimen>
+ <dimen name="notification_large_icon_width">64dp</dimen>
+ <dimen name="notification_subtext_size">12dp</dimen>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/colors.xml -->
+ <eat-comment/>
+ <drawable name="notification_template_icon_bg">#3333B5E5</drawable>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/ids.xml -->
+ <eat-comment/>
<item name="action_bar_activity_content" type="id"/>
+ <item name="action_bar_spinner" type="id"/>
<item name="action_menu_divider" type="id"/>
<item name="action_menu_presenter" type="id"/>
<item name="home" type="id"/>
<item name="progress_circular" type="id"/>
<item name="progress_horizontal" type="id"/>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/dimens.xml -->
- <eat-comment />
-
+ <item name="split_action_bar" type="id"/>
+ <item name="up" type="id"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/config.xml -->
+ <eat-comment/>
+ <integer name="abc_config_activityDefaultDur">220</integer>
+ <integer name="abc_config_activityShortDur">150</integer>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/dimens.xml -->
+ <eat-comment/>
<integer name="abc_max_action_buttons">2</integer>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/strings.xml -->
- <eat-comment />
-
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/config.xml -->
+ <eat-comment/>
+ <integer name="cancel_button_image_alpha">127</integer>
+ <integer name="status_bar_notification_info_maxnum">999</integer>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/strings.xml -->
+ <eat-comment/>
<string name="abc_action_bar_home_description">Navigate home</string>
+ <string name="abc_action_bar_home_description_format">%1$s, %2$s</string>
+ <string name="abc_action_bar_home_subtitle_description_format">%1$s, %2$s, %3$s</string>
<string name="abc_action_bar_up_description">Navigate up</string>
<string name="abc_action_menu_overflow_description">More options</string>
<string name="abc_action_mode_done">Done</string>
<string name="abc_activity_chooser_view_see_all">See all</string>
<string name="abc_activitychooserview_choose_application">Choose an app</string>
+ <string name="abc_capital_off">OFF</string>
+ <string name="abc_capital_on">ON</string>
+ <string name="abc_search_hint">Search…</string>
<string name="abc_searchview_description_clear">Clear query</string>
<string name="abc_searchview_description_query">Search query</string>
<string name="abc_searchview_description_search">Search</string>
<string name="abc_searchview_description_voice">Voice search</string>
<string name="abc_shareactionprovider_share_with">Share with</string>
<string name="abc_shareactionprovider_share_with_application">Share with %s</string>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
- <eat-comment />
-
- <style name="TextAppearance.AppCompat.Base.CompactMenu.Dialog" parent="android:TextAppearance.Medium">
- <item name="android:textColor">@android:color/primary_text_light</item>
+ <string name="abc_toolbar_collapse_description">Collapse</string>
+ <string name="status_bar_notification_info_overflow">999+</string>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles.xml -->
+ <eat-comment/>
+ <style name="AlertDialog.AppCompat" parent="Base.AlertDialog.AppCompat"/>
+ <style name="AlertDialog.AppCompat.Light" parent="Base.AlertDialog.AppCompat.Light"/>
+ <style name="Animation.AppCompat.Dialog" parent="Base.Animation.AppCompat.Dialog"/>
+ <style name="Animation.AppCompat.DropDownUp" parent="Base.Animation.AppCompat.DropDownUp"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.AlertDialog.AppCompat" parent="android:Widget">
+ <item name="android:layout">@layout/abc_alert_dialog_material</item>
+ <item name="listLayout">@layout/abc_select_dialog_material</item>
+ <item name="listItemLayout">@layout/select_dialog_item_material</item>
+ <item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item>
+ <item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item>
</style>
-
- <style name="TextAppearance.AppCompat.Base.SearchResult" parent="">
- <item name="android:textStyle">normal</item>
+ <style name="Base.AlertDialog.AppCompat.Light" parent="Base.AlertDialog.AppCompat"/>
+ <style name="Base.Animation.AppCompat.Dialog" parent="android:Animation">
+ <item name="android:windowEnterAnimation">@anim/abc_popup_enter</item>
+ <item name="android:windowExitAnimation">@anim/abc_popup_exit</item>
+ </style>
+ <style name="Base.Animation.AppCompat.DropDownUp" parent="android:Animation">
+ <item name="android:windowEnterAnimation">@anim/abc_grow_fade_in_from_bottom</item>
+ <item name="android:windowExitAnimation">@anim/abc_shrink_fade_out_from_bottom</item>
+ </style>
+ <style name="Base.DialogWindowTitle.AppCompat" parent="android:Widget">
+ <item name="android:maxLines">1</item>
+ <item name="android:scrollHorizontally">true</item>
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
+ </style>
+ <style name="Base.DialogWindowTitleBackground.AppCompat" parent="android:Widget">
+ <item name="android:background">@null</item>
+ <item name="android:paddingLeft">?attr/dialogPreferredPadding</item>
+ <item name="android:paddingRight">?attr/dialogPreferredPadding</item>
+ <item name="android:paddingTop">@dimen/abc_dialog_padding_top_material</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat" parent="android:TextAppearance">
<item name="android:textColor">?android:textColorPrimary</item>
<item name="android:textColorHint">?android:textColorHint</item>
+ <item name="android:textColorHighlight">?android:textColorHighlight</item>
+ <item name="android:textColorLink">?android:textColorLink</item>
+ <item name="android:textSize">@dimen/abc_text_size_body_1_material</item>
</style>
-
- <style name="TextAppearance.AppCompat.Base.SearchResult.Subtitle">
- <item name="android:textSize">14sp</item>
+ <style name="Base.TextAppearance.AppCompat.Body1">
+ <item name="android:textSize">@dimen/abc_text_size_body_1_material</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Body2">
+ <item name="android:textSize">@dimen/abc_text_size_body_2_material</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Button">
+ <item name="android:textSize">@dimen/abc_text_size_button_material</item>
+ <item name="textAllCaps">true</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Caption">
+ <item name="android:textSize">@dimen/abc_text_size_caption_material</item>
<item name="android:textColor">?android:textColorSecondary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Base.SearchResult.Title">
- <item name="android:textSize">18sp</item>
+ <style name="Base.TextAppearance.AppCompat.Display1">
+ <item name="android:textSize">@dimen/abc_text_size_display_1_material</item>
+ <item name="android:textColor">?android:textColorSecondary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Base.Widget.PopupMenu.Large" parent="android:TextAppearance.Widget">
- <item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item>
- <item name="android:textSize">18sp</item>
+ <style name="Base.TextAppearance.AppCompat.Display2">
+ <item name="android:textSize">@dimen/abc_text_size_display_2_material</item>
+ <item name="android:textColor">?android:textColorSecondary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Base.Widget.PopupMenu.Small" parent="android:TextAppearance.Widget">
- <item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item>
- <item name="android:textSize">14sp</item>
+ <style name="Base.TextAppearance.AppCompat.Display3">
+ <item name="android:textSize">@dimen/abc_text_size_display_3_material</item>
+ <item name="android:textColor">?android:textColorSecondary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Light.Base.SearchResult" parent="TextAppearance.AppCompat.Base.SearchResult">
+ <style name="Base.TextAppearance.AppCompat.Display4">
+ <item name="android:textSize">@dimen/abc_text_size_display_4_material</item>
+ <item name="android:textColor">?android:textColorSecondary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Headline">
+ <item name="android:textSize">@dimen/abc_text_size_headline_material</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Large">
+ <item name="android:textSize">@dimen/abc_text_size_large_material</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Large.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Large" parent="TextAppearance.AppCompat.Menu">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Small" parent="TextAppearance.AppCompat.Menu">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Medium">
+ <item name="android:textSize">@dimen/abc_text_size_medium_material</item>
+ <item name="android:textColor">?android:attr/textColorSecondary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Medium.Inverse">
+ <item name="android:textColor">?android:attr/textColorSecondaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Menu">
+ <item name="android:textSize">@dimen/abc_text_size_menu_material</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.SearchResult" parent="">
+ <item name="android:textStyle">normal</item>
<item name="android:textColor">?android:textColorPrimary</item>
<item name="android:textColorHint">?android:textColorHint</item>
</style>
-
- <style name="TextAppearance.AppCompat.Light.Base.SearchResult.Subtitle">
+ <style name="Base.TextAppearance.AppCompat.SearchResult.Subtitle">
<item name="android:textSize">14sp</item>
<item name="android:textColor">?android:textColorSecondary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Light.Base.SearchResult.Title">
+ <style name="Base.TextAppearance.AppCompat.SearchResult.Title">
<item name="android:textSize">18sp</item>
</style>
-
- <style name="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Large" parent="TextAppearance.AppCompat.Base.Widget.PopupMenu.Large"></style>
-
- <style name="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Small" parent="TextAppearance.AppCompat.Base.Widget.PopupMenu.Small"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles.xml -->
- <eat-comment />
-
- <style name="TextAppearance.AppCompat.Light.SearchResult.Subtitle" parent="TextAppearance.AppCompat.Light.Base.SearchResult.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Light.SearchResult.Title" parent="TextAppearance.AppCompat.Light.Base.SearchResult.Title"></style>
-
- <style name="TextAppearance.AppCompat.Light.Widget.PopupMenu.Large" parent="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Large"></style>
-
- <style name="TextAppearance.AppCompat.Light.Widget.PopupMenu.Small" parent="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Small"></style>
-
- <style name="TextAppearance.AppCompat.SearchResult.Subtitle" parent="TextAppearance.AppCompat.Base.SearchResult.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.SearchResult.Title" parent="TextAppearance.AppCompat.Base.SearchResult.Title"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionBar.Menu" parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Menu"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionBar.Subtitle" parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionBar.Title" parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Title"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Title.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionMode.Subtitle" parent="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionMode.Title" parent="TextAppearance.AppCompat.Widget.Base.ActionMode.Title"></style>
-
- <style name="TextAppearance.AppCompat.Widget.ActionMode.Title.Inverse" parent="TextAppearance.AppCompat.Widget.Base.ActionMode.Title.Inverse"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
- <eat-comment />
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Menu" parent="android:TextAppearance.Small">
- <item name="android:textSize">12sp</item>
- <item name="android:textStyle">bold</item>
- <item name="android:textColor">?attr/actionMenuTextColor</item>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Small">
+ <item name="android:textSize">@dimen/abc_text_size_small_material</item>
+ <item name="android:textColor">?android:attr/textColorTertiary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle" parent="android:TextAppearance.Small">
- <item name="android:textSize">@dimen/abc_action_bar_subtitle_text_size</item>
+ <style name="Base.TextAppearance.AppCompat.Small.Inverse">
+ <item name="android:textColor">?android:attr/textColorTertiaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle.Inverse" parent="android:TextAppearance.Small.Inverse">
- <item name="android:textSize">@dimen/abc_action_bar_subtitle_text_size</item>
+ <style name="Base.TextAppearance.AppCompat.Subhead">
+ <item name="android:textSize">@dimen/abc_text_size_subhead_material</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title" parent="android:TextAppearance.Medium">
- <item name="android:textSize">@dimen/abc_action_bar_title_text_size</item>
+ <style name="Base.TextAppearance.AppCompat.Subhead.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title.Inverse" parent="android:TextAppearance.Medium.Inverse">
- <item name="android:textSize">@dimen/abc_action_bar_title_text_size</item>
+ <style name="Base.TextAppearance.AppCompat.Title">
+ <item name="android:textSize">@dimen/abc_text_size_title_material</item>
+ <item name="android:textColor">?android:textColorPrimary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle" parent="android:TextAppearance.Small">
+ <style name="Base.TextAppearance.AppCompat.Title.Inverse">
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Menu" parent="TextAppearance.AppCompat.Menu">
+ <item name="android:textColor">?attr/actionMenuTextColor</item>
+ <item name="textAllCaps">@bool/abc_config_actionMenuItemAllCaps</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Subtitle" parent="TextAppearance.AppCompat.Subhead">
+ <item name="android:textSize">@dimen/abc_text_size_subtitle_material_toolbar</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle.Inverse" parent="android:TextAppearance.Small.Inverse">
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.AppCompat.Subhead.Inverse">
+ <item name="android:textSize">@dimen/abc_text_size_subtitle_material_toolbar</item>
<item name="android:textColor">?android:attr/textColorSecondaryInverse</item>
</style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title" parent="android:TextAppearance.Medium"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title.Inverse" parent="android:TextAppearance.Medium.Inverse"></style>
-
- <style name="TextAppearance.AppCompat.Widget.Base.DropDownItem" parent="android:TextAppearance.Small">
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Title" parent="TextAppearance.AppCompat.Title">
+ <item name="android:textSize">@dimen/abc_text_size_title_material_toolbar</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" parent="TextAppearance.AppCompat.Title.Inverse">
+ <item name="android:textSize">@dimen/abc_text_size_title_material_toolbar</item>
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionMode.Subtitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle"/>
+ <style name="Base.TextAppearance.AppCompat.Widget.ActionMode.Title" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base_text.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.Button" parent="TextAppearance.AppCompat.Button"/>
+ <style name="Base.TextAppearance.AppCompat.Widget.Button.Inverse" parent="TextAppearance.AppCompat.Button">
+ <item name="android:textColor">?android:textColorPrimaryInverse</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.TextAppearance.AppCompat.Widget.DropDownItem" parent="android:TextAppearance.Small">
<item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item>
</style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles.xml -->
- <eat-comment />
-
- <style name="TextAppearance.AppCompat.Widget.DropDownItem" parent="TextAppearance.AppCompat.Widget.Base.DropDownItem"></style>
-
- <style name="TextAppearance.AppCompat.Widget.PopupMenu.Large" parent="TextAppearance.AppCompat.Base.Widget.PopupMenu.Large"></style>
-
- <style name="TextAppearance.AppCompat.Widget.PopupMenu.Small" parent="TextAppearance.AppCompat.Base.Widget.PopupMenu.Small"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
- <eat-comment />
-
- <style name="TextAppearance.Widget.AppCompat.Base.ExpandedMenu.Item" parent="android:TextAppearance.Medium">
+ <style name="Base.TextAppearance.AppCompat.Widget.PopupMenu.Large" parent="TextAppearance.AppCompat.Menu">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.PopupMenu.Small" parent="TextAppearance.AppCompat.Menu">
+ </style>
+ <style name="Base.TextAppearance.AppCompat.Widget.Switch" parent="TextAppearance.AppCompat.Button"/>
+ <style name="Base.TextAppearance.AppCompat.Widget.TextView.SpinnerItem" parent="TextAppearance.AppCompat.Menu"/>
+ <style name="Base.TextAppearance.Widget.AppCompat.ExpandedMenu.Item" parent="android:TextAppearance.Medium">
<item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item>
</style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles.xml -->
- <eat-comment />
-
- <style name="TextAppearance.Widget.AppCompat.ExpandedMenu.Item" parent="TextAppearance.Widget.AppCompat.Base.ExpandedMenu.Item"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/themes.xml -->
- <eat-comment />
-
- <style name="Theme.AppCompat" parent="Theme.Base.AppCompat">
- <item name="isLightTheme">false</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="spinnerDropDownItemStyle"> @style/Widget.AppCompat.DropDownItem.Spinner</item>
- <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="searchResultListItemHeight">58dip</item>
-
- <!-- Popup Menu styles -->
- <item name="popupMenuStyle">@style/Widget.AppCompat.PopupMenu</item>
- <item name="textAppearanceLargePopupMenu"> @style/TextAppearance.AppCompat.Widget.PopupMenu.Large</item>
- <item name="textAppearanceSmallPopupMenu"> @style/TextAppearance.AppCompat.Widget.PopupMenu.Small</item>
- <item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item>
- <item name="dropDownListViewStyle">@style/Widget.AppCompat.ListView.DropDown</item>
-
- <!-- SearchView attributes -->
- <item name="searchDropdownBackground">@drawable/abc_search_dropdown_dark</item>
- <item name="searchViewTextField">@drawable/abc_textfield_searchview_holo_dark</item>
- <item name="searchViewTextFieldRight">@drawable/abc_textfield_searchview_right_holo_dark</item>
- <item name="searchViewCloseIcon">@drawable/abc_ic_clear</item>
- <item name="searchViewSearchIcon">@drawable/abc_ic_search</item>
- <item name="searchViewGoIcon">@drawable/abc_ic_go</item>
- <item name="searchViewVoiceIcon">@drawable/abc_ic_voice_search</item>
- <item name="searchViewEditQuery">@drawable/abc_ic_commit_search_api_holo_dark</item>
- <item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>
- <item name="searchViewAutoCompleteTextView"> @style/Widget.AppCompat.AutoCompleteTextView</item>
- <item name="textColorSearchUrl">@color/abc_search_url_text_holo</item>
- <item name="textAppearanceSearchResultTitle"> @style/TextAppearance.AppCompat.SearchResult.Title</item>
- <item name="textAppearanceSearchResultSubtitle"> @style/TextAppearance.AppCompat.SearchResult.Subtitle</item>
- <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_holo_dark</item>
-
- <!-- ShareActionProvider attributes -->
- <item name="activityChooserViewStyle">@style/Widget.AppCompat.ActivityChooserView</item>
+ <style name="Base.TextAppearance.Widget.AppCompat.Toolbar.Subtitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
</style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/themes_base.xml -->
- <eat-comment />
-
- <style name="Theme.AppCompat.Base.CompactMenu" parent="">
- <item name="android:itemTextAppearance"> @style/TextAppearance.Widget.AppCompat.ExpandedMenu.Item</item>
+ <style name="Base.TextAppearance.Widget.AppCompat.Toolbar.Title" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/themes_base.xml -->
+ <eat-comment/>
+ <style name="Base.Theme.AppCompat" parent="Base.V7.Theme.AppCompat">
+ </style>
+ <style name="Base.Theme.AppCompat.CompactMenu" parent="">
+ <item name="android:itemTextAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:listViewStyle">@style/Widget.AppCompat.ListView.Menu</item>
+ <item name="android:windowAnimationStyle">@style/Animation.AppCompat.DropDownUp</item>
</style>
-
- <style name="Theme.AppCompat.Base.CompactMenu.Dialog" parent="">
- <item name="android:itemTextAppearance"> @style/TextAppearance.AppCompat.Base.CompactMenu.Dialog</item>
- <item name="android:listViewStyle">@android:style/Widget.ListView.Menu</item>
+ <style name="Base.Theme.AppCompat.Dialog" parent="Base.V7.Theme.AppCompat.Dialog"/>
+ <style name="Base.Theme.AppCompat.Dialog.Alert">
+ <item name="windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+ <item name="windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
</style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/themes.xml -->
- <eat-comment />
-
- <style name="Theme.AppCompat.CompactMenu" parent="Theme.AppCompat.Base.CompactMenu"></style>
-
- <style name="Theme.AppCompat.CompactMenu.Dialog" parent="Theme.AppCompat.Base.CompactMenu.Dialog"></style>
-
- <style name="Theme.AppCompat.DialogWhenLarge" parent="Theme.Base.AppCompat.DialogWhenLarge"></style>
-
- <style name="Theme.AppCompat.Light" parent="Theme.Base.AppCompat.Light">
- <item name="isLightTheme">true</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="spinnerDropDownItemStyle"> @style/Widget.AppCompat.Light.DropDownItem.Spinner</item>
- <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="searchResultListItemHeight">58dip</item>
-
- <!-- Popup Menu styles -->
- <item name="popupMenuStyle">@style/Widget.AppCompat.Light.PopupMenu</item>
- <item name="textAppearanceLargePopupMenu"> @style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
- <item name="textAppearanceSmallPopupMenu"> @style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>
- <item name="listPopupWindowStyle">@style/Widget.AppCompat.Light.ListPopupWindow</item>
- <item name="dropDownListViewStyle">@style/Widget.AppCompat.Light.ListView.DropDown</item>
+ <style name="Base.Theme.AppCompat.Dialog.FixedSize">
+ <item name="windowFixedWidthMajor">@dimen/abc_dialog_fixed_width_major</item>
+ <item name="windowFixedWidthMinor">@dimen/abc_dialog_fixed_width_minor</item>
+ <item name="windowFixedHeightMajor">@dimen/abc_dialog_fixed_height_major</item>
+ <item name="windowFixedHeightMinor">@dimen/abc_dialog_fixed_height_minor</item>
+ </style>
+ <style name="Base.Theme.AppCompat.Dialog.MinWidth">
+ <item name="windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+ <item name="windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
+ </style>
+ <style name="Base.Theme.AppCompat.DialogWhenLarge" parent="Theme.AppCompat"/>
+ <style name="Base.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light">
+ </style>
+ <style name="Base.Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light">
+ <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
+ <item name="actionBarWidgetTheme">@null</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
- <!-- SearchView attributes -->
- <item name="searchDropdownBackground">@drawable/abc_search_dropdown_light</item>
- <item name="searchViewTextField">@drawable/abc_textfield_searchview_holo_light</item>
- <item name="searchViewTextFieldRight">@drawable/abc_textfield_searchview_right_holo_light</item>
- <item name="searchViewCloseIcon">@drawable/abc_ic_clear_holo_light</item>
- <item name="searchViewSearchIcon">@drawable/abc_ic_search_api_holo_light</item>
- <item name="searchViewGoIcon">@drawable/abc_ic_go_search_api_holo_light</item>
- <item name="searchViewVoiceIcon">@drawable/abc_ic_voice_search_api_holo_light</item>
- <item name="searchViewEditQuery">@drawable/abc_ic_commit_search_api_holo_light</item>
- <item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>
- <item name="searchViewAutoCompleteTextView"> @style/Widget.AppCompat.Light.AutoCompleteTextView</item>
- <item name="textColorSearchUrl">@color/abc_search_url_text_holo</item>
- <item name="textAppearanceSearchResultTitle"> @style/TextAppearance.AppCompat.Light.SearchResult.Title</item>
- <item name="textAppearanceSearchResultSubtitle"> @style/TextAppearance.AppCompat.Light.SearchResult.Subtitle</item>
- <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_holo_light</item>
+ <!-- Panel attributes -->
+ <item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>
- <!-- ShareActionProvider attributes -->
- <item name="activityChooserViewStyle">@style/Widget.AppCompat.Light.ActivityChooserView</item>
+ <item name="colorPrimaryDark">@color/primary_dark_material_dark</item>
+ <item name="colorPrimary">@color/primary_material_dark</item>
</style>
-
- <style name="Theme.AppCompat.Light.DarkActionBar" parent="Theme.Base.AppCompat.Light.DarkActionBar">
+ <style name="Base.Theme.AppCompat.Light.Dialog" parent="Base.V7.Theme.AppCompat.Light.Dialog"/>
+ <style name="Base.Theme.AppCompat.Light.Dialog.Alert">
+ <item name="windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+ <item name="windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
+ </style>
+ <style name="Base.Theme.AppCompat.Light.Dialog.FixedSize">
+ <item name="windowFixedWidthMajor">@dimen/abc_dialog_fixed_width_major</item>
+ <item name="windowFixedWidthMinor">@dimen/abc_dialog_fixed_width_minor</item>
+ <item name="windowFixedHeightMajor">@dimen/abc_dialog_fixed_height_major</item>
+ <item name="windowFixedHeightMinor">@dimen/abc_dialog_fixed_height_minor</item>
+ </style>
+ <style name="Base.Theme.AppCompat.Light.Dialog.MinWidth">
+ <item name="windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+ <item name="windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
+ </style>
+ <style name="Base.Theme.AppCompat.Light.DialogWhenLarge" parent="Theme.AppCompat.Light"/>
+ <style name="Base.ThemeOverlay.AppCompat" parent="Platform.ThemeOverlay.AppCompat"/>
+ <style name="Base.ThemeOverlay.AppCompat.ActionBar">
+ <item name="colorControlNormal">?android:attr/textColorPrimary</item>
+ <item name="searchViewStyle">@style/Widget.AppCompat.SearchView.ActionBar</item>
+ </style>
+ <style name="Base.ThemeOverlay.AppCompat.Dark" parent="Platform.ThemeOverlay.AppCompat.Dark">
+ <item name="android:windowBackground">@color/background_material_dark</item>
+ <item name="android:colorForeground">@color/foreground_material_dark</item>
+ <item name="android:colorForegroundInverse">@color/foreground_material_light</item>
+ <item name="android:colorBackground">@color/background_material_dark</item>
+ <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_dark</item>
+
+ <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
+ <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_light</item>
+ <item name="android:textColorPrimaryDisableOnly">@color/abc_primary_text_disable_only_material_dark</item>
+ <item name="android:textColorSecondary">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorSecondaryInverse">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorTertiary">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorTertiaryInverse">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorHint">@color/hint_foreground_material_dark</item>
+ <item name="android:textColorHintInverse">@color/hint_foreground_material_light</item>
+ <item name="android:textColorHighlight">@color/highlighted_text_material_dark</item>
+
+ <item name="colorControlNormal">?android:attr/textColorSecondary</item>
+ <item name="colorControlHighlight">@color/ripple_material_dark</item>
+ <item name="colorButtonNormal">@color/button_material_dark</item>
+ <item name="colorSwitchThumbNormal">@color/switch_thumb_material_dark</item>
+
+ <!-- Used by MediaRouter -->
+ <item name="isLightTheme">false</item>
+ </style>
+ <style name="Base.ThemeOverlay.AppCompat.Dark.ActionBar">
+ <item name="colorControlNormal">?android:attr/textColorPrimary</item>
+ <item name="searchViewStyle">@style/Widget.AppCompat.SearchView.ActionBar</item>
+ </style>
+ <style name="Base.ThemeOverlay.AppCompat.Light" parent="Platform.ThemeOverlay.AppCompat.Light">
+ <item name="android:windowBackground">@color/background_material_light</item>
+ <item name="android:colorForeground">@color/foreground_material_light</item>
+ <item name="android:colorForegroundInverse">@color/foreground_material_dark</item>
+ <item name="android:colorBackground">@color/background_material_light</item>
+ <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_light</item>
+
+ <item name="android:textColorPrimary">@color/abc_primary_text_material_light</item>
+ <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_dark</item>
+ <item name="android:textColorSecondary">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorSecondaryInverse">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorTertiary">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorTertiaryInverse">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorPrimaryDisableOnly">@color/abc_primary_text_disable_only_material_light</item>
+ <item name="android:textColorPrimaryInverseDisableOnly">@color/abc_primary_text_disable_only_material_dark</item>
+ <item name="android:textColorHint">@color/hint_foreground_material_light</item>
+ <item name="android:textColorHintInverse">@color/hint_foreground_material_dark</item>
+ <item name="android:textColorHighlight">@color/highlighted_text_material_light</item>
+
+ <item name="colorControlNormal">?android:attr/textColorSecondary</item>
+ <item name="colorControlHighlight">@color/ripple_material_light</item>
+ <item name="colorButtonNormal">@color/button_material_light</item>
+ <item name="colorSwitchThumbNormal">@color/switch_thumb_material_light</item>
+
+ <!-- Used by MediaRouter -->
<item name="isLightTheme">true</item>
-
- <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
- <item name="spinnerDropDownItemStyle"> @style/Widget.AppCompat.Light.DropDownItem.Spinner</item>
- <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="searchResultListItemHeight">58dip</item>
-
- <!-- Popup Menu styles -->
- <item name="popupMenuStyle">@style/Widget.AppCompat.Light.PopupMenu</item>
- <item name="textAppearanceLargePopupMenu"> @style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
- <item name="textAppearanceSmallPopupMenu"> @style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>
- <item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item>
- <item name="dropDownListViewStyle">@style/Widget.AppCompat.ListView.DropDown</item>
-
- <!-- SearchView attributes -->
- <item name="searchDropdownBackground">@drawable/abc_search_dropdown_dark</item>
- <item name="searchViewTextField">@drawable/abc_textfield_searchview_holo_dark</item>
- <item name="searchViewTextFieldRight">@drawable/abc_textfield_searchview_right_holo_dark</item>
- <item name="searchViewCloseIcon">@drawable/abc_ic_clear</item>
- <item name="searchViewSearchIcon">@drawable/abc_ic_search</item>
- <item name="searchViewGoIcon">@drawable/abc_ic_go</item>
- <item name="searchViewVoiceIcon">@drawable/abc_ic_voice_search</item>
- <item name="searchViewEditQuery">@drawable/abc_ic_commit_search_api_holo_dark</item>
- <item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>
- <item name="searchViewAutoCompleteTextView"> @style/Widget.AppCompat.AutoCompleteTextView</item>
- <item name="textColorSearchUrl">@color/abc_search_url_text_holo</item>
- <item name="textAppearanceSearchResultTitle"> @style/TextAppearance.AppCompat.SearchResult.Title</item>
- <item name="textAppearanceSearchResultSubtitle"> @style/TextAppearance.AppCompat.SearchResult.Subtitle</item>
- <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_holo_dark</item>
-
- <!-- ShareActionProvider attributes -->
- <item name="activityChooserViewStyle">@style/Widget.AppCompat.ActivityChooserView</item>
</style>
+ <style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
+ <item name="windowNoTitle">false</item>
+ <item name="windowActionBar">true</item>
+ <item name="windowActionBarOverlay">false</item>
+ <item name="windowActionModeOverlay">false</item>
+ <item name="actionBarPopupTheme">@null</item>
- <style name="Theme.AppCompat.Light.DialogWhenLarge" parent="Theme.Base.AppCompat.Light.DialogWhenLarge"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/themes_base.xml -->
- <eat-comment />
-
- <style name="Theme.Base" parent="android:Theme"></style>
+ <!-- Used by MediaRouter -->
+ <item name="isLightTheme">false</item>
- <style name="Theme.Base.AppCompat" parent="Theme.Base">
- <item name="windowActionBar">true</item>
- <!-- Remove system title bars; we will add the action bar ourselves. -->
- <item name="android:windowNoTitle">true</item>
- <item name="buttonBarStyle">@android:style/ButtonBar</item>
- <item name="buttonBarButtonStyle">@android:style/Widget.Button</item>
<item name="selectableItemBackground">@drawable/abc_item_background_holo_dark</item>
- <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_holo_dark</item>
- <item name="dividerVertical">@drawable/abc_list_divider_holo_dark</item>
- <item name="dividerHorizontal">@drawable/abc_list_divider_holo_dark</item>
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">48dp</item>
- <item name="listPreferredItemHeightLarge">80dp</item>
- <item name="listPreferredItemPaddingLeft">8dip</item>
- <item name="listPreferredItemPaddingRight">8dip</item>
- <item name="textAppearanceListItem">?android:attr/textAppearanceMedium</item>
- <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
+ <item name="selectableItemBackgroundBorderless">?attr/selectableItemBackground</item>
+ <item name="borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless</item>
+ <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
+
+ <item name="dividerVertical">@drawable/abc_list_divider_mtrl_alpha</item>
+ <item name="dividerHorizontal">@drawable/abc_list_divider_mtrl_alpha</item>
+
+ <!-- Action Bar Styles -->
<item name="actionBarTabStyle">@style/Widget.AppCompat.ActionBar.TabView</item>
<item name="actionBarTabBarStyle">@style/Widget.AppCompat.ActionBar.TabBar</item>
<item name="actionBarTabTextStyle">@style/Widget.AppCompat.ActionBar.TabText</item>
<item name="actionButtonStyle">@style/Widget.AppCompat.ActionButton</item>
<item name="actionOverflowButtonStyle">@style/Widget.AppCompat.ActionButton.Overflow</item>
- <item name="actionBarStyle">@style/Widget.AppCompat.ActionBar</item>
+ <item name="actionOverflowMenuStyle">@style/Widget.AppCompat.PopupMenu.Overflow</item>
+ <item name="actionBarStyle">@style/Widget.AppCompat.ActionBar.Solid</item>
<item name="actionBarSplitStyle">?attr/actionBarStyle</item>
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarSize">@dimen/abc_action_bar_default_height</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.ActionBar</item>
+ <item name="actionBarSize">@dimen/abc_action_bar_default_height_material</item>
<item name="actionBarDivider">?attr/dividerVertical</item>
- <item name="actionBarItemBackground">?attr/selectableItemBackground</item>
- <item name="actionMenuTextAppearance"> @style/TextAppearance.AppCompat.Widget.ActionBar.Menu</item>
+ <item name="actionBarItemBackground">?attr/selectableItemBackgroundBorderless</item>
+ <item name="actionMenuTextAppearance">@style/TextAppearance.AppCompat.Widget.ActionBar.Menu</item>
<item name="actionMenuTextColor">?android:attr/textColorPrimaryDisableOnly</item>
<!-- Dropdown Spinner Attributes -->
<!-- Action Mode -->
<item name="actionModeStyle">@style/Widget.AppCompat.ActionMode</item>
- <item name="actionModeBackground">@drawable/abc_cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@drawable/abc_cab_background_bottom_holo_dark</item>
- <item name="actionModeCloseDrawable">@drawable/abc_ic_cab_done_holo_dark</item>
+ <item name="actionModeBackground">@drawable/abc_cab_background_top_material</item>
+ <item name="actionModeSplitBackground">?attr/colorPrimaryDark</item>
+ <item name="actionModeCloseDrawable">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
<item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionButton.CloseMode</item>
+ <item name="actionModeCutDrawable">@drawable/abc_ic_menu_cut_mtrl_alpha</item>
+ <item name="actionModeCopyDrawable">@drawable/abc_ic_menu_copy_mtrl_am_alpha</item>
+ <item name="actionModePasteDrawable">@drawable/abc_ic_menu_paste_mtrl_am_alpha</item>
+ <item name="actionModeSelectAllDrawable">@drawable/abc_ic_menu_selectall_mtrl_alpha</item>
+ <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_mtrl_alpha</item>
+
<!-- Panel attributes -->
<item name="panelMenuListWidth">@dimen/abc_panel_menu_list_width</item>
<item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenu</item>
- <item name="android:panelBackground">@drawable/abc_menu_hardkey_panel_holo_dark</item>
+ <item name="panelBackground">@drawable/abc_menu_hardkey_panel_mtrl_mult</item>
+ <item name="android:panelBackground">@android:color/transparent</item>
<item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>
- </style>
- <style name="Theme.Base.AppCompat.Dialog.FixedSize" parent="android:Theme.Dialog">
- <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
- <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
- <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
- <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
- <item name="windowActionBar">true</item>
- <!-- Remove system title bars; we will add the action bar ourselves. -->
- <item name="android:windowNoTitle">true</item>
- <item name="buttonBarStyle">@android:style/ButtonBar</item>
- <item name="buttonBarButtonStyle">@android:style/Widget.Button</item>
- <item name="selectableItemBackground">@drawable/abc_item_background_holo_dark</item>
- <item name="dividerVertical">@drawable/abc_list_divider_holo_dark</item>
- <item name="dividerHorizontal">@drawable/abc_list_divider_holo_dark</item>
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
+ <!-- List attributes -->
+ <item name="textAppearanceListItem">@style/TextAppearance.AppCompat.Subhead</item>
+ <item name="textAppearanceListItemSmall">@style/TextAppearance.AppCompat.Subhead</item>
+ <item name="listPreferredItemHeight">64dp</item>
<item name="listPreferredItemHeightSmall">48dp</item>
<item name="listPreferredItemHeightLarge">80dp</item>
- <item name="listPreferredItemPaddingLeft">8dip</item>
- <item name="listPreferredItemPaddingRight">8dip</item>
- <item name="textAppearanceListItem">?android:attr/textAppearanceMedium</item>
- <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
+ <item name="listPreferredItemPaddingLeft">@dimen/abc_list_item_padding_horizontal_material</item>
+ <item name="listPreferredItemPaddingRight">@dimen/abc_list_item_padding_horizontal_material</item>
- <!-- Action Mode -->
- <item name="actionModeStyle">@style/Widget.AppCompat.ActionMode</item>
- <item name="actionModeBackground">@drawable/abc_cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@drawable/abc_cab_background_bottom_holo_dark</item>
- <item name="actionModeCloseDrawable">@drawable/abc_ic_cab_done_holo_dark</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionButton.CloseMode</item>
+ <!-- Spinner styles -->
+ <item name="spinnerStyle">@style/Widget.AppCompat.Spinner</item>
+ <item name="android:spinnerItemStyle">@style/Widget.AppCompat.TextView.SpinnerItem</item>
+ <item name="android:dropDownListViewStyle">@style/Widget.AppCompat.ListView.DropDown</item>
- <!-- Panel attributes -->
- <item name="panelMenuListWidth">@dimen/abc_panel_menu_list_width</item>
- <item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenu</item>
- <item name="android:panelBackground">@drawable/abc_menu_hardkey_panel_holo_dark</item>
- <item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>
- </style>
+ <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
+ <item name="spinnerDropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinner</item>
+ <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <style name="Theme.Base.AppCompat.Dialog.Light.FixedSize" parent="Theme.Base.AppCompat.Dialog.FixedSize" />
+ <!-- Popup Menu styles -->
+ <item name="popupMenuStyle">@style/Widget.AppCompat.PopupMenu</item>
+ <item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Widget.PopupMenu.Large</item>
+ <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Widget.PopupMenu.Small</item>
+ <item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item>
+ <item name="dropDownListViewStyle">?android:attr/dropDownListViewStyle</item>
- <style name="Theme.Base.AppCompat.DialogWhenLarge" parent="Theme.Base.AppCompat"></style>
+ <!-- SearchView attributes -->
+ <item name="searchViewStyle">@style/Widget.AppCompat.SearchView</item>
+ <item name="android:dropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinner</item>
+ <item name="textColorSearchUrl">@color/abc_search_url_text</item>
+ <item name="textAppearanceSearchResultTitle">@style/TextAppearance.AppCompat.SearchResult.Title</item>
+ <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.AppCompat.SearchResult.Subtitle</item>
+
+ <!-- ShareActionProvider attributes -->
+ <item name="activityChooserViewStyle">@style/Widget.AppCompat.ActivityChooserView</item>
- <style name="Theme.Base.AppCompat.Light" parent="Theme.Base.Light">
+ <!-- Toolbar styles -->
+ <item name="toolbarStyle">@style/Widget.AppCompat.Toolbar</item>
+ <item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigation</item>
+
+ <item name="editTextStyle">@style/Widget.AppCompat.EditText</item>
+ <item name="editTextBackground">@drawable/abc_edit_text_material</item>
+ <item name="editTextColor">?android:attr/textColorPrimary</item>
+ <item name="autoCompleteTextViewStyle">@style/Widget.AppCompat.AutoCompleteTextView</item>
+
+ <!-- Color palette -->
+ <item name="colorPrimaryDark">@color/primary_dark_material_dark</item>
+ <item name="colorPrimary">@color/primary_material_dark</item>
+ <item name="colorAccent">@color/accent_material_dark</item>
+
+ <item name="colorControlNormal">?android:attr/textColorSecondary</item>
+ <item name="colorControlActivated">?attr/colorAccent</item>
+ <item name="colorControlHighlight">@color/ripple_material_dark</item>
+ <item name="colorButtonNormal">@color/button_material_dark</item>
+ <item name="colorSwitchThumbNormal">@color/switch_thumb_material_dark</item>
+ <item name="controlBackground">?attr/selectableItemBackgroundBorderless</item>
+
+ <item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
+
+ <item name="checkboxStyle">@style/Widget.AppCompat.CompoundButton.CheckBox</item>
+ <item name="radioButtonStyle">@style/Widget.AppCompat.CompoundButton.RadioButton</item>
+ <item name="switchStyle">@style/Widget.AppCompat.CompoundButton.Switch</item>
+
+ <item name="ratingBarStyle">@style/Widget.AppCompat.RatingBar</item>
+ <item name="seekBarStyle">@style/Widget.AppCompat.SeekBar</item>
+
+ <!-- Button styles -->
+ <item name="buttonStyle">@style/Widget.AppCompat.Button</item>
+ <item name="buttonStyleSmall">@style/Widget.AppCompat.Button.Small</item>
+ <item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Widget.Button</item>
+
+ <item name="imageButtonStyle">@style/Widget.AppCompat.ImageButton</item>
+
+ <item name="buttonBarStyle">@style/Widget.AppCompat.ButtonBar</item>
+ <item name="buttonBarButtonStyle">@style/Widget.AppCompat.Button.ButtonBar.AlertDialog</item>
+ <item name="buttonBarPositiveButtonStyle">?attr/buttonBarButtonStyle</item>
+ <item name="buttonBarNegativeButtonStyle">?attr/buttonBarButtonStyle</item>
+ <item name="buttonBarNeutralButtonStyle">?attr/buttonBarButtonStyle</item>
+
+ <!-- Dialog attributes -->
+ <item name="dialogTheme">@style/Theme.AppCompat.Dialog</item>
+ <item name="dialogPreferredPadding">@dimen/abc_dialog_padding_material</item>
+
+ <item name="alertDialogTheme">@style/Theme.AppCompat.Dialog.Alert</item>
+ <item name="alertDialogStyle">@style/AlertDialog.AppCompat</item>
+ <item name="alertDialogCenterButtons">false</item>
+ <item name="textColorAlertDialogListItem">@color/abc_primary_text_material_dark</item>
+ <item name="listDividerAlertDialog">@null</item>
+
+ <!-- Define these here; ContextThemeWrappers around themes that define them should
+ always clear these values. -->
+ <item name="windowFixedWidthMajor">0dp</item>
+ <item name="windowFixedWidthMinor">0dp</item>
+ <item name="windowFixedHeightMajor">0dp</item>
+ <item name="windowFixedHeightMinor">0dp</item>
+ </style>
+ <style name="Base.V7.Theme.AppCompat.Dialog" parent="Base.Theme.AppCompat">
+ <item name="android:colorBackground">@color/background_floating_material_dark</item>
+ <item name="android:colorBackgroundCacheHint">@null</item>
+
+ <item name="android:windowFrame">@null</item>
+ <item name="android:windowTitleStyle">@style/RtlOverlay.DialogWindowTitle.AppCompat</item>
+ <item name="android:windowTitleBackgroundStyle">@style/Base.DialogWindowTitleBackground.AppCompat</item>
+ <item name="android:windowBackground">@drawable/abc_dialog_material_background_dark</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowAnimationStyle">@style/Animation.AppCompat.Dialog</item>
+ <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
+
+ <item name="windowActionBar">false</item>
+ <item name="windowActionModeOverlay">true</item>
+
+ <item name="listPreferredItemPaddingLeft">24dip</item>
+ <item name="listPreferredItemPaddingRight">24dip</item>
+
+ <item name="android:listDivider">@null</item>
+ </style>
+ <style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
+ <item name="windowNoTitle">false</item>
<item name="windowActionBar">true</item>
- <!-- Remove system title bars; we will add the action bar ourselves. -->
- <item name="android:windowNoTitle">true</item>
- <item name="buttonBarStyle">@android:style/ButtonBar</item>
- <item name="buttonBarButtonStyle">@android:style/Widget.Button</item>
+ <item name="windowActionBarOverlay">false</item>
+ <item name="windowActionModeOverlay">false</item>
+ <item name="actionBarPopupTheme">@null</item>
+
+ <!-- Used by MediaRouter -->
+ <item name="isLightTheme">true</item>
+
<item name="selectableItemBackground">@drawable/abc_item_background_holo_light</item>
- <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_holo_light</item>
- <item name="dividerVertical">@drawable/abc_list_divider_holo_light</item>
- <item name="dividerHorizontal">@drawable/abc_list_divider_holo_light</item>
- <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
- <item name="listPreferredItemHeightSmall">48dp</item>
- <item name="listPreferredItemHeightLarge">80dp</item>
- <item name="listPreferredItemPaddingLeft">8dip</item>
- <item name="listPreferredItemPaddingRight">8dip</item>
- <item name="textAppearanceListItem">?android:attr/textAppearanceMedium</item>
- <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
+ <item name="selectableItemBackgroundBorderless">?attr/selectableItemBackground</item>
+ <item name="borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless</item>
+ <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
+
+ <item name="dividerVertical">@drawable/abc_list_divider_mtrl_alpha</item>
+ <item name="dividerHorizontal">@drawable/abc_list_divider_mtrl_alpha</item>
<!-- Action Bar Styles -->
<item name="actionBarTabStyle">@style/Widget.AppCompat.Light.ActionBar.TabView</item>
<item name="actionBarTabBarStyle">@style/Widget.AppCompat.Light.ActionBar.TabBar</item>
<item name="actionBarTabTextStyle">@style/Widget.AppCompat.Light.ActionBar.TabText</item>
<item name="actionButtonStyle">@style/Widget.AppCompat.Light.ActionButton</item>
- <item name="actionOverflowButtonStyle"> @style/Widget.AppCompat.Light.ActionButton.Overflow</item>
- <item name="actionBarStyle">@style/Widget.AppCompat.Light.ActionBar</item>
+ <item name="actionOverflowButtonStyle">@style/Widget.AppCompat.Light.ActionButton.Overflow</item>
+ <item name="actionOverflowMenuStyle">@style/Widget.AppCompat.Light.PopupMenu.Overflow</item>
+ <item name="actionBarStyle">@style/Widget.AppCompat.Light.ActionBar.Solid</item>
<item name="actionBarSplitStyle">?attr/actionBarStyle</item>
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarSize">@dimen/abc_action_bar_default_height</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.ActionBar</item>
+ <item name="actionBarSize">@dimen/abc_action_bar_default_height_material</item>
<item name="actionBarDivider">?attr/dividerVertical</item>
- <item name="actionBarItemBackground">?attr/selectableItemBackground</item>
- <item name="actionMenuTextAppearance"> @style/TextAppearance.AppCompat.Widget.ActionBar.Menu</item>
+ <item name="actionBarItemBackground">?attr/selectableItemBackgroundBorderless</item>
+ <item name="actionMenuTextAppearance">@style/TextAppearance.AppCompat.Widget.ActionBar.Menu</item>
<item name="actionMenuTextColor">?android:attr/textColorPrimaryDisableOnly</item>
<!-- Action Mode -->
<item name="actionModeStyle">@style/Widget.AppCompat.ActionMode</item>
- <item name="actionModeBackground">@drawable/abc_cab_background_top_holo_light</item>
- <item name="actionModeSplitBackground">@drawable/abc_cab_background_bottom_holo_light</item>
- <item name="actionModeCloseDrawable">@drawable/abc_ic_cab_done_holo_light</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.Light.ActionButton.CloseMode</item>
+ <item name="actionModeBackground">@drawable/abc_cab_background_top_material</item>
+ <item name="actionModeSplitBackground">?attr/colorPrimaryDark</item>
+ <item name="actionModeCloseDrawable">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
+ <item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionButton.CloseMode</item>
+
+ <item name="actionModeCutDrawable">@drawable/abc_ic_menu_cut_mtrl_alpha</item>
+ <item name="actionModeCopyDrawable">@drawable/abc_ic_menu_copy_mtrl_am_alpha</item>
+ <item name="actionModePasteDrawable">@drawable/abc_ic_menu_paste_mtrl_am_alpha</item>
+ <item name="actionModeSelectAllDrawable">@drawable/abc_ic_menu_selectall_mtrl_alpha</item>
+ <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_mtrl_alpha</item>
<!-- Dropdown Spinner Attributes -->
- <item name="actionDropDownStyle"> @style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar</item>
+ <item name="actionDropDownStyle">@style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar</item>
<!-- Panel attributes -->
<item name="panelMenuListWidth">@dimen/abc_panel_menu_list_width</item>
<item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenu</item>
- <item name="android:panelBackground">@drawable/abc_menu_hardkey_panel_holo_light</item>
+ <item name="panelBackground">@drawable/abc_menu_hardkey_panel_mtrl_mult</item>
+ <item name="android:panelBackground">@android:color/transparent</item>
<item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_light</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Light.DarkActionBar" parent="Theme.Base.AppCompat.Light">
- <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_holo_dark</item>
- <item name="actionOverflowButtonStyle">@style/Widget.AppCompat.ActionButton.Overflow</item>
- <item name="actionBarStyle">@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse</item>
- <item name="actionBarWidgetTheme">@style/Theme.AppCompat</item>
- <item name="actionBarDivider">@drawable/abc_list_divider_holo_dark</item>
- <item name="actionBarItemBackground">@drawable/abc_item_background_holo_dark</item>
- <item name="actionBarTabStyle">@style/Widget.AppCompat.Light.ActionBar.TabView.Inverse</item>
- <item name="actionBarTabBarStyle">@style/Widget.AppCompat.Light.ActionBar.TabBar.Inverse</item>
- <item name="actionBarTabTextStyle">@style/Widget.AppCompat.Light.ActionBar.TabText.Inverse</item>
- <item name="actionMenuTextColor">?android:attr/textColorPrimaryInverseDisableOnly</item>
-
- <!-- Action Mode -->
- <item name="actionModeStyle">@style/Widget.AppCompat.Light.ActionMode.Inverse</item>
- <item name="actionModeBackground">@drawable/abc_cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@drawable/abc_cab_background_bottom_holo_dark</item>
- <item name="actionModeCloseDrawable">@drawable/abc_ic_cab_done_holo_dark</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionButton.CloseMode</item>
- <!-- Dropdown Spinner Attributes -->
- <item name="actionDropDownStyle">@style/Widget.AppCompat.Spinner.DropDown.ActionBar</item>
-
- <!-- Panel attributes -->
- <item name="android:panelBackground">@drawable/abc_menu_hardkey_panel_holo_dark</item>
- <item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>
- </style>
-
- <style name="Theme.Base.AppCompat.Light.DialogWhenLarge" parent="Theme.Base.AppCompat.Light"></style>
-
- <style name="Theme.Base.Light" parent="android:Theme.Light"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles.xml -->
- <eat-comment />
-
- <style name="Widget.AppCompat.ActionBar" parent="Widget.AppCompat.Base.ActionBar"></style>
-
- <style name="Widget.AppCompat.ActionBar.Solid" parent="Widget.AppCompat.Base.ActionBar.Solid"></style>
-
- <style name="Widget.AppCompat.ActionBar.TabBar" parent="Widget.AppCompat.Base.ActionBar.TabBar"></style>
-
- <style name="Widget.AppCompat.ActionBar.TabText" parent="Widget.AppCompat.Base.ActionBar.TabText"></style>
-
- <style name="Widget.AppCompat.ActionBar.TabView" parent="Widget.AppCompat.Base.ActionBar.TabView"></style>
-
- <style name="Widget.AppCompat.ActionButton" parent="Widget.AppCompat.Base.ActionButton"></style>
+ <!-- List attributes -->
+ <item name="textAppearanceListItem">@style/TextAppearance.AppCompat.Subhead</item>
+ <item name="textAppearanceListItemSmall">@style/TextAppearance.AppCompat.Subhead</item>
+ <item name="listPreferredItemHeight">64dp</item>
+ <item name="listPreferredItemHeightSmall">48dp</item>
+ <item name="listPreferredItemHeightLarge">80dp</item>
+ <item name="listPreferredItemPaddingLeft">@dimen/abc_list_item_padding_horizontal_material</item>
+ <item name="listPreferredItemPaddingRight">@dimen/abc_list_item_padding_horizontal_material</item>
- <style name="Widget.AppCompat.ActionButton.CloseMode" parent="Widget.AppCompat.Base.ActionButton.CloseMode"></style>
+ <!-- Spinner styles -->
+ <item name="spinnerStyle">@style/Widget.AppCompat.Spinner</item>
+ <item name="android:spinnerItemStyle">@style/Widget.AppCompat.TextView.SpinnerItem</item>
+ <item name="android:dropDownListViewStyle">@style/Widget.AppCompat.ListView.DropDown</item>
- <style name="Widget.AppCompat.ActionButton.Overflow" parent="Widget.AppCompat.Base.ActionButton.Overflow"></style>
+ <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
+ <item name="spinnerDropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinner</item>
+ <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <style name="Widget.AppCompat.ActionMode" parent="Widget.AppCompat.Base.ActionMode"></style>
+ <!-- Popup Menu styles -->
+ <item name="popupMenuStyle">@style/Widget.AppCompat.Light.PopupMenu</item>
+ <item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
+ <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>
+ <item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item>
+ <item name="dropDownListViewStyle">?android:attr/dropDownListViewStyle</item>
- <style name="Widget.AppCompat.ActivityChooserView" parent="Widget.AppCompat.Base.ActivityChooserView"></style>
+ <!-- SearchView attributes -->
+ <item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item>
+ <item name="android:dropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinner</item>
+ <item name="textColorSearchUrl">@color/abc_search_url_text</item>
+ <item name="textAppearanceSearchResultTitle">@style/TextAppearance.AppCompat.SearchResult.Title</item>
+ <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.AppCompat.SearchResult.Subtitle</item>
- <style name="Widget.AppCompat.AutoCompleteTextView" parent="Widget.AppCompat.Base.AutoCompleteTextView"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
- <eat-comment />
+ <!-- ShareActionProvider attributes -->
+ <item name="activityChooserViewStyle">@style/Widget.AppCompat.ActivityChooserView</item>
- <style name="Widget.AppCompat.Base.ActionBar" parent="">
- <item name="displayOptions">useLogo|showHome|showTitle</item>
+ <!-- Toolbar styles -->
+ <item name="toolbarStyle">@style/Widget.AppCompat.Toolbar</item>
+ <item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigation</item>
+
+ <item name="editTextStyle">@style/Widget.AppCompat.EditText</item>
+ <item name="editTextBackground">@drawable/abc_edit_text_material</item>
+ <item name="editTextColor">?android:attr/textColorPrimary</item>
+ <item name="autoCompleteTextViewStyle">@style/Widget.AppCompat.AutoCompleteTextView</item>
+
+ <!-- Color palette -->
+ <item name="colorPrimaryDark">@color/primary_dark_material_light</item>
+ <item name="colorPrimary">@color/primary_material_light</item>
+ <item name="colorAccent">@color/accent_material_light</item>
+
+ <item name="colorControlNormal">?android:attr/textColorSecondary</item>
+ <item name="colorControlActivated">?attr/colorAccent</item>
+ <item name="colorControlHighlight">@color/ripple_material_light</item>
+ <item name="colorButtonNormal">@color/button_material_light</item>
+ <item name="colorSwitchThumbNormal">@color/switch_thumb_material_light</item>
+ <item name="controlBackground">?attr/selectableItemBackgroundBorderless</item>
+
+ <item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
+
+ <item name="checkboxStyle">@style/Widget.AppCompat.CompoundButton.CheckBox</item>
+ <item name="radioButtonStyle">@style/Widget.AppCompat.CompoundButton.RadioButton</item>
+ <item name="switchStyle">@style/Widget.AppCompat.CompoundButton.Switch</item>
+
+ <item name="ratingBarStyle">@style/Widget.AppCompat.RatingBar</item>
+ <item name="seekBarStyle">@style/Widget.AppCompat.SeekBar</item>
+
+ <!-- Button styles -->
+ <item name="buttonStyle">@style/Widget.AppCompat.Button</item>
+ <item name="buttonStyleSmall">@style/Widget.AppCompat.Button.Small</item>
+ <item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Widget.Button</item>
+
+ <item name="imageButtonStyle">@style/Widget.AppCompat.ImageButton</item>
+
+ <item name="buttonBarStyle">@style/Widget.AppCompat.ButtonBar</item>
+ <item name="buttonBarButtonStyle">@style/Widget.AppCompat.Button.ButtonBar.AlertDialog</item>
+ <item name="buttonBarPositiveButtonStyle">?attr/buttonBarButtonStyle</item>
+ <item name="buttonBarNegativeButtonStyle">?attr/buttonBarButtonStyle</item>
+ <item name="buttonBarNeutralButtonStyle">?attr/buttonBarButtonStyle</item>
+
+ <!-- Dialog attributes -->
+ <item name="dialogTheme">@style/Theme.AppCompat.Light.Dialog</item>
+ <item name="dialogPreferredPadding">@dimen/abc_dialog_padding_material</item>
+
+ <item name="alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
+ <item name="alertDialogStyle">@style/AlertDialog.AppCompat.Light</item>
+ <item name="alertDialogCenterButtons">false</item>
+ <item name="textColorAlertDialogListItem">@color/abc_primary_text_material_light</item>
+ <item name="listDividerAlertDialog">@null</item>
+
+ <!-- Define these here; ContextThemeWrappers around themes that define them should
+ always clear these values. -->
+ <item name="windowFixedWidthMajor">0dp</item>
+ <item name="windowFixedWidthMinor">0dp</item>
+ <item name="windowFixedHeightMajor">0dp</item>
+ <item name="windowFixedHeightMinor">0dp</item>
+ </style>
+ <style name="Base.V7.Theme.AppCompat.Light.Dialog" parent="Base.Theme.AppCompat.Light">
+ <item name="android:colorBackground">@color/background_floating_material_light</item>
+ <item name="android:colorBackgroundCacheHint">@null</item>
+
+ <item name="android:windowFrame">@null</item>
+ <item name="android:windowTitleStyle">@style/RtlOverlay.DialogWindowTitle.AppCompat</item>
+ <item name="android:windowTitleBackgroundStyle">@style/Base.DialogWindowTitleBackground.AppCompat</item>
+ <item name="android:windowBackground">@drawable/abc_dialog_material_background_light</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowAnimationStyle">@style/Animation.AppCompat.Dialog</item>
+ <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
+
+ <item name="windowActionBar">false</item>
+ <item name="windowActionModeOverlay">true</item>
+
+ <item name="listPreferredItemPaddingLeft">24dip</item>
+ <item name="listPreferredItemPaddingRight">24dip</item>
+
+ <item name="android:listDivider">@null</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Base.V7.Widget.AppCompat.AutoCompleteTextView" parent="android:Widget.AutoCompleteTextView">
+ <item name="android:dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
+ <item name="android:popupBackground">@drawable/abc_popup_background_mtrl_mult</item>
+ <item name="android:background">?attr/editTextBackground</item>
+ <item name="android:textColor">?attr/editTextColor</item>
+ <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
+ </style>
+ <style name="Base.V7.Widget.AppCompat.EditText" parent="android:Widget.EditText">
+ <item name="android:background">?attr/editTextBackground</item>
+ <item name="android:textColor">?attr/editTextColor</item>
+ <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ActionBar" parent="">
+ <item name="displayOptions">showTitle</item>
<item name="divider">?attr/dividerVertical</item>
<item name="height">?attr/actionBarSize</item>
- <item name="homeLayout">@layout/abc_action_bar_home</item>
+
<item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionBar.Title</item>
<item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle</item>
- <item name="background">@drawable/abc_ab_transparent_dark_holo</item>
- <item name="backgroundStacked">@drawable/abc_ab_stacked_transparent_dark_holo</item>
- <item name="backgroundSplit">@drawable/abc_ab_bottom_transparent_dark_holo</item>
+
+ <item name="background">@null</item>
+ <item name="backgroundStacked">@null</item>
+ <item name="backgroundSplit">@null</item>
+
<item name="actionButtonStyle">@style/Widget.AppCompat.ActionButton</item>
<item name="actionOverflowButtonStyle">@style/Widget.AppCompat.ActionButton.Overflow</item>
- <item name="progressBarStyle">@style/Widget.AppCompat.ProgressBar.Horizontal</item>
- <item name="indeterminateProgressStyle">@style/Widget.AppCompat.ProgressBar</item>
- </style>
- <style name="Widget.AppCompat.Base.ActionBar.Solid" parent="Widget.AppCompat.Base.ActionBar">
- <item name="background">@drawable/abc_ab_solid_dark_holo</item>
- <item name="backgroundStacked">@drawable/abc_ab_stacked_solid_dark_holo</item>
- <item name="backgroundSplit">@drawable/abc_ab_bottom_solid_dark_holo</item>
+ <item name="android:gravity">center_vertical</item>
+ <item name="contentInsetStart">@dimen/abc_action_bar_content_inset_material</item>
+ <item name="contentInsetEnd">@dimen/abc_action_bar_content_inset_material</item>
+ <item name="elevation">8dp</item>
+ <item name="popupTheme">?attr/actionBarPopupTheme</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActionBar.TabBar" parent="">
+ <style name="Base.Widget.AppCompat.ActionBar.Solid">
+ <item name="background">?attr/colorPrimary</item>
+ <item name="backgroundStacked">?attr/colorPrimary</item>
+ <item name="backgroundSplit">?attr/colorPrimary</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ActionBar.TabBar" parent="">
<item name="divider">?attr/actionBarDivider</item>
<item name="showDividers">middle</item>
- <item name="dividerPadding">12dip</item>
+ <item name="dividerPadding">8dip</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActionBar.TabText" parent="">
- <item name="android:textAppearance">@null</item>
- <item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item>
+ <style name="Base.Widget.AppCompat.ActionBar.TabText" parent="">
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat.Medium</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">12sp</item>
<item name="android:textStyle">bold</item>
<item name="android:ellipsize">marquee</item>
<item name="android:maxLines">2</item>
+ <item name="android:maxWidth">180dp</item>
<item name="textAllCaps">true</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActionBar.TabView" parent="">
- <item name="android:background">@drawable/abc_tab_indicator_ab_holo</item>
+ <style name="Base.Widget.AppCompat.ActionBar.TabView" parent="">
+ <item name="android:background">@drawable/abc_tab_indicator_material</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:paddingLeft">16dip</item>
<item name="android:paddingRight">16dip</item>
+ <item name="android:layout_width">0dip</item>
+ <item name="android:layout_weight">1</item>
<item name="android:minWidth">80dip</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActionButton" parent="">
+ <style name="Base.Widget.AppCompat.ActionButton" parent="RtlUnderlay.Widget.AppCompat.ActionButton">
<item name="android:background">?attr/actionBarItemBackground</item>
- <item name="android:paddingLeft">12dip</item>
- <item name="android:paddingRight">12dip</item>
- <item name="android:minWidth">@dimen/abc_action_button_min_width</item>
- <item name="android:minHeight">?attr/actionBarSize</item>
+ <item name="android:minWidth">@dimen/abc_action_button_min_width_material</item>
+ <item name="android:minHeight">@dimen/abc_action_button_min_height_material</item>
+ <item name="android:scaleType">center</item>
<item name="android:gravity">center</item>
<item name="android:maxLines">2</item>
<item name="textAllCaps">@bool/abc_config_actionMenuItemAllCaps</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActionButton.CloseMode" parent="Widget.AppCompat.Base.ActionButton"></style>
-
- <style name="Widget.AppCompat.Base.ActionButton.Overflow" parent="Widget.AppCompat.Base.ActionButton">
- <item name="android:src">@drawable/abc_ic_menu_moreoverflow_normal_holo_dark</item>
+ <style name="Base.Widget.AppCompat.ActionButton.CloseMode">
+ <item name="android:background">?attr/controlBackground</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActionMode" parent="">
+ <style name="Base.Widget.AppCompat.ActionButton.Overflow" parent="RtlUnderlay.Widget.AppCompat.ActionButton.Overflow">
+ <item name="android:src">@drawable/abc_ic_menu_moreoverflow_mtrl_alpha</item>
+ <item name="android:background">?attr/actionBarItemBackground</item>
+ <item name="android:contentDescription">@string/abc_action_menu_overflow_description</item>
+ <item name="android:minWidth">@dimen/abc_action_button_min_width_overflow_material</item>
+ <item name="android:minHeight">@dimen/abc_action_button_min_height_material</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ActionMode" parent="">
<item name="background">?attr/actionModeBackground</item>
<item name="backgroundSplit">?attr/actionModeSplitBackground</item>
<item name="height">?attr/actionBarSize</item>
<item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Title</item>
<item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle</item>
+ <item name="closeItemLayout">@layout/abc_action_mode_close_item_material</item>
</style>
-
- <style name="Widget.AppCompat.Base.ActivityChooserView" parent="">
+ <style name="Base.Widget.AppCompat.ActivityChooserView" parent="">
<item name="android:gravity">center</item>
- <item name="android:background">@drawable/abc_ab_share_pack_holo_dark</item>
+ <item name="android:background">@drawable/abc_ab_share_pack_mtrl_alpha</item>
<item name="divider">?attr/dividerVertical</item>
<item name="showDividers">middle</item>
<item name="dividerPadding">6dip</item>
</style>
-
- <style name="Widget.AppCompat.Base.AutoCompleteTextView" parent="android:Widget.AutoCompleteTextView">
- <item name="android:textColor">?attr/actionMenuTextColor</item>
- <item name="android:dropDownSelector">@drawable/abc_list_selector_holo_dark</item>
- <item name="android:popupBackground">@drawable/abc_menu_dropdown_panel_holo_dark</item>
+ <style name="Base.Widget.AppCompat.AutoCompleteTextView" parent="Base.V7.Widget.AppCompat.AutoCompleteTextView"/>
+ <style name="Base.Widget.AppCompat.Button" parent="android:Widget">
+ <item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>
+ <item name="android:textAppearance">?android:attr/textAppearanceButton</item>
+ <item name="android:minHeight">48dip</item>
+ <item name="android:minWidth">88dip</item>
+ <item name="android:focusable">true</item>
+ <item name="android:clickable">true</item>
+ <item name="android:gravity">center_vertical|center_horizontal</item>
</style>
-
- <style name="Widget.AppCompat.Base.DropDownItem.Spinner" parent="">
+ <style name="Base.Widget.AppCompat.Button.Borderless">
+ <item name="android:background">@drawable/abc_btn_borderless_material</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Button.Borderless.Colored">
+ <item name="android:textColor">?attr/colorAccent</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Button.ButtonBar.AlertDialog" parent="Widget.AppCompat.Button.Borderless.Colored">
+ <item name="android:minWidth">64dp</item>
+ <item name="android:maxLines">2</item>
+ <item name="android:minHeight">@dimen/abc_alert_dialog_button_bar_height</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Button.Colored">
+ <item name="android:background">@drawable/abc_btn_colored_material</item>
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat.Widget.Button.Inverse</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Button.Small">
+ <item name="android:minHeight">48dip</item>
+ <item name="android:minWidth">48dip</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ButtonBar" parent="android:Widget">
+ <item name="android:background">@null</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ButtonBar.AlertDialog"/>
+ <style name="Base.Widget.AppCompat.CompoundButton.CheckBox" parent="android:Widget.CompoundButton.CheckBox">
+ <item name="android:button">?android:attr/listChoiceIndicatorMultiple</item>
+ <item name="android:background">?attr/controlBackground</item>
+ </style>
+ <style name="Base.Widget.AppCompat.CompoundButton.RadioButton" parent="android:Widget.CompoundButton.RadioButton">
+ <item name="android:button">?android:attr/listChoiceIndicatorSingle</item>
+ <item name="android:background">?attr/controlBackground</item>
+ </style>
+ <style name="Base.Widget.AppCompat.CompoundButton.Switch" parent="android:Widget.CompoundButton">
+ <item name="track">@drawable/abc_switch_track_mtrl_alpha</item>
+ <item name="android:thumb">@drawable/abc_switch_thumb_material</item>
+ <item name="switchTextAppearance">@style/TextAppearance.AppCompat.Widget.Switch</item>
+ <item name="android:background">?attr/controlBackground</item>
+ <item name="showText">false</item>
+ <item name="switchPadding">@dimen/abc_switch_padding</item>
+ <item name="android:textOn">@string/abc_capital_on</item>
+ <item name="android:textOff">@string/abc_capital_off</item>
+ </style>
+ <style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle.Common">
+ <item name="barLength">18dp</item>
+ <item name="gapBetweenBars">3dp</item>
+ <item name="drawableSize">24dp</item>
+ </style>
+ <style name="Base.Widget.AppCompat.DrawerArrowToggle.Common" parent="">
+ <item name="color">?android:attr/textColorSecondary</item>
+ <item name="spinBars">true</item>
+ <item name="thickness">2dp</item>
+ <item name="arrowShaftLength">16dp</item>
+ <item name="arrowHeadLength">8dp</item>
+ </style>
+ <style name="Base.Widget.AppCompat.DropDownItem.Spinner" parent="">
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Widget.DropDownItem</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:gravity">center_vertical</item>
</style>
-
- <style name="Widget.AppCompat.Base.ListPopupWindow" parent="">
- <item name="android:dropDownSelector">@drawable/abc_list_selector_holo_dark</item>
- <item name="android:popupBackground">@drawable/abc_menu_dropdown_panel_holo_dark</item>
+ <style name="Base.Widget.AppCompat.EditText" parent="Base.V7.Widget.AppCompat.EditText"/>
+ <style name="Base.Widget.AppCompat.ImageButton" parent="android:Widget.ImageButton">
+ <item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar" parent="Base.Widget.AppCompat.ActionBar">
+ <item name="actionButtonStyle">@style/Widget.AppCompat.Light.ActionButton</item>
+ <item name="actionOverflowButtonStyle">@style/Widget.AppCompat.Light.ActionButton.Overflow</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.Solid">
+ <item name="background">?attr/colorPrimary</item>
+ <item name="backgroundStacked">?attr/colorPrimary</item>
+ <item name="backgroundSplit">?attr/colorPrimary</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabBar" parent="Base.Widget.AppCompat.ActionBar.TabBar">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabText" parent="Base.Widget.AppCompat.ActionBar.TabText">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabText.Inverse" parent="Base.Widget.AppCompat.Light.ActionBar.TabText">
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat.Medium.Inverse</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Light.ActionBar.TabView" parent="Base.Widget.AppCompat.ActionBar.TabView">
+ <item name="android:background">@drawable/abc_tab_indicator_material</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Light.PopupMenu" parent="@style/Widget.AppCompat.ListPopupWindow">
+ </style>
+ <style name="Base.Widget.AppCompat.Light.PopupMenu.Overflow">
+ <item name="overlapAnchor">true</item>
+ <item name="android:dropDownHorizontalOffset">-4dip</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ListPopupWindow" parent="">
+ <item name="android:dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
+ <item name="android:popupBackground">@drawable/abc_popup_background_mtrl_mult</item>
<item name="android:dropDownVerticalOffset">0dip</item>
<item name="android:dropDownHorizontalOffset">0dip</item>
<item name="android:dropDownWidth">wrap_content</item>
</style>
-
- <style name="Widget.AppCompat.Base.ListView.DropDown" parent="android:Widget.ListView">
- <item name="android:listSelector">@drawable/abc_list_selector_holo_dark</item>
+ <style name="Base.Widget.AppCompat.ListView" parent="android:Widget.ListView">
+ <item name="android:listSelector">?attr/listChoiceBackgroundIndicator</item>
</style>
-
- <style name="Widget.AppCompat.Base.ListView.Menu" parent="android:Widget.ListView.Menu">
+ <style name="Base.Widget.AppCompat.ListView.DropDown">
+ <item name="android:divider">@null</item>
+ </style>
+ <style name="Base.Widget.AppCompat.ListView.Menu" parent="android:Widget.ListView.Menu">
<item name="android:listSelector">?attr/listChoiceBackgroundIndicator</item>
<item name="android:divider">?attr/dividerHorizontal</item>
</style>
-
- <style name="Widget.AppCompat.Base.PopupMenu" parent="@style/Widget.AppCompat.Base.ListPopupWindow"></style>
-
- <style name="Widget.AppCompat.Base.ProgressBar" parent="android:Widget.ProgressBar">
+ <style name="Base.Widget.AppCompat.PopupMenu" parent="@style/Widget.AppCompat.ListPopupWindow">
+ </style>
+ <style name="Base.Widget.AppCompat.PopupMenu.Overflow">
+ <item name="overlapAnchor">true</item>
+ <item name="android:dropDownHorizontalOffset">-4dip</item>
+ </style>
+ <style name="Base.Widget.AppCompat.PopupWindow" parent="android:Widget.PopupWindow">
+ </style>
+ <style name="Base.Widget.AppCompat.ProgressBar" parent="android:Widget.ProgressBar">
<item name="android:minWidth">@dimen/abc_action_bar_progress_bar_size</item>
<item name="android:maxWidth">@dimen/abc_action_bar_progress_bar_size</item>
<item name="android:minHeight">@dimen/abc_action_bar_progress_bar_size</item>
<item name="android:maxHeight">@dimen/abc_action_bar_progress_bar_size</item>
</style>
-
- <style name="Widget.AppCompat.Base.ProgressBar.Horizontal" parent="android:Widget.ProgressBar.Horizontal"></style>
-
- <style name="Widget.AppCompat.Base.Spinner" parent="">
- <item name="spinnerMode">dropdown</item>
- <item name="android:popupBackground">@drawable/abc_menu_dropdown_panel_holo_dark</item>
- <item name="android:dropDownSelector">@drawable/abc_list_selector_holo_dark</item>
+ <style name="Base.Widget.AppCompat.ProgressBar.Horizontal" parent="android:Widget.ProgressBar.Horizontal">
+ </style>
+ <style name="Base.Widget.AppCompat.RatingBar" parent="android:Widget.RatingBar">
+ <item name="android:progressDrawable">@drawable/abc_ratingbar_full_material</item>
+ <item name="android:indeterminateDrawable">@drawable/abc_ratingbar_full_material</item>
+ </style>
+ <style name="Base.Widget.AppCompat.SearchView" parent="android:Widget">
+ <item name="layout">@layout/abc_search_view</item>
+ <item name="queryBackground">@drawable/abc_textfield_search_material</item>
+ <item name="submitBackground">@drawable/abc_textfield_search_material</item>
+ <item name="closeIcon">@drawable/abc_ic_clear_mtrl_alpha</item>
+ <item name="searchIcon">@drawable/abc_ic_search_api_mtrl_alpha</item>
+ <item name="searchHintIcon">@drawable/abc_ic_search_api_mtrl_alpha</item>
+ <item name="goIcon">@drawable/abc_ic_go_search_api_mtrl_alpha</item>
+ <item name="voiceIcon">@drawable/abc_ic_voice_search_api_mtrl_alpha</item>
+ <item name="commitIcon">@drawable/abc_ic_commit_search_api_mtrl_alpha</item>
+ <item name="suggestionRowLayout">@layout/abc_search_dropdown_item_icons_2line</item>
+ </style>
+ <style name="Base.Widget.AppCompat.SearchView.ActionBar">
+ <item name="queryBackground">@null</item>
+ <item name="submitBackground">@null</item>
+ <item name="searchHintIcon">@null</item>
+ <item name="defaultQueryHint">@string/abc_search_hint</item>
+ </style>
+ <style name="Base.Widget.AppCompat.SeekBar" parent="android:Widget">
+ <item name="android:indeterminateOnly">false</item>
+ <item name="android:progressDrawable">@drawable/abc_seekbar_track_material</item>
+ <item name="android:indeterminateDrawable">@drawable/abc_seekbar_track_material</item>
+ <item name="android:thumb">@drawable/abc_seekbar_thumb_material</item>
+ <item name="android:focusable">true</item>
+ <item name="android:paddingLeft">16dip</item>
+ <item name="android:paddingRight">16dip</item>
+ </style>
+ <style name="Base.Widget.AppCompat.Spinner" parent="Platform.Widget.AppCompat.Spinner">
+ <item name="android:background">@drawable/abc_spinner_mtrl_am_alpha</item>
+ <item name="android:popupBackground">@drawable/abc_popup_background_mtrl_mult</item>
+ <item name="android:dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
<item name="android:dropDownVerticalOffset">0dip</item>
<item name="android:dropDownHorizontalOffset">0dip</item>
<item name="android:dropDownWidth">wrap_content</item>
- <item name="android:gravity">left|center_vertical</item>
<item name="android:clickable">true</item>
- <item name="android:background">@drawable/abc_spinner_ab_holo_dark</item>
+ <item name="android:gravity">left|start|center_vertical</item>
+ <item name="overlapAnchor">true</item>
</style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles.xml -->
- <eat-comment />
-
- <style name="Widget.AppCompat.DropDownItem.Spinner" parent="Widget.AppCompat.Base.DropDownItem.Spinner"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar" parent="Widget.AppCompat.Light.Base.ActionBar"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.Solid" parent="Widget.AppCompat.Light.Base.ActionBar.Solid"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.Solid.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.Solid.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.TabBar" parent="Widget.AppCompat.Light.Base.ActionBar.TabBar"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.TabBar.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.TabBar.Inverse" />
-
- <style name="Widget.AppCompat.Light.ActionBar.TabText" parent="Widget.AppCompat.Light.Base.ActionBar.TabText"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.TabText.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.TabText.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.TabView" parent="Widget.AppCompat.Light.Base.ActionBar.TabView"></style>
-
- <style name="Widget.AppCompat.Light.ActionBar.TabView.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.TabView.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.ActionButton" parent="Widget.AppCompat.Light.Base.ActionButton"></style>
-
- <style name="Widget.AppCompat.Light.ActionButton.CloseMode" parent="Widget.AppCompat.Light.Base.ActionButton.CloseMode"></style>
-
- <style name="Widget.AppCompat.Light.ActionButton.Overflow" parent="Widget.AppCompat.Light.Base.ActionButton.Overflow"></style>
-
- <style name="Widget.AppCompat.Light.ActionMode.Inverse" parent="Widget.AppCompat.Light.Base.ActionMode.Inverse"></style>
-
- <style name="Widget.AppCompat.Light.ActivityChooserView" parent="Widget.AppCompat.Light.Base.ActivityChooserView"></style>
-
- <style name="Widget.AppCompat.Light.AutoCompleteTextView" parent="Widget.AppCompat.Light.Base.AutoCompleteTextView"></style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
- <eat-comment />
-
- <style name="Widget.AppCompat.Light.Base.ActionBar" parent="Widget.AppCompat.Base.ActionBar">
- <item name="background">@drawable/abc_ab_transparent_light_holo</item>
- <item name="backgroundStacked">@drawable/abc_ab_stacked_transparent_light_holo</item>
- <item name="backgroundSplit">@drawable/abc_ab_bottom_transparent_light_holo</item>
- <item name="actionButtonStyle">@style/Widget.AppCompat.Light.ActionButton</item>
- <item name="actionOverflowButtonStyle">@style/Widget.AppCompat.Light.ActionButton.Overflow</item>
- <item name="progressBarStyle">@style/Widget.AppCompat.ProgressBar.Horizontal</item>
- <item name="indeterminateProgressStyle">@style/Widget.AppCompat.ProgressBar</item>
+ <style name="Base.Widget.AppCompat.Spinner.Underlined">
+ <item name="android:background">@drawable/abc_spinner_textfield_background_material</item>
</style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.Solid" parent="Widget.AppCompat.Light.Base.ActionBar">
- <item name="background">@drawable/abc_ab_solid_light_holo</item>
- <item name="backgroundStacked">@drawable/abc_ab_stacked_solid_light_holo</item>
- <item name="backgroundSplit">@drawable/abc_ab_bottom_solid_light_holo</item>
+ <style name="Base.Widget.AppCompat.TextView.SpinnerItem" parent="android:Widget.TextView.SpinnerItem">
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat.Widget.TextView.SpinnerItem</item>
+ <item name="android:paddingLeft">8dp</item>
+ <item name="android:paddingRight">8dp</item>
</style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.Solid.Inverse" parent="Widget.AppCompat.Base.ActionBar.Solid">
- <item name="titleTextStyle"> @style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse</item>
- <item name="subtitleTextStyle"> @style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse</item>
- <item name="actionButtonStyle">@style/Widget.AppCompat.ActionButton</item>
- <item name="actionOverflowButtonStyle">@style/Widget.AppCompat.ActionButton.Overflow</item>
+ <style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget">
+ <item name="titleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Title</item>
+ <item name="subtitleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle</item>
+ <item name="android:minHeight">?attr/actionBarSize</item>
+ <item name="titleMargins">4dp</item>
+ <item name="maxButtonHeight">56dp</item>
+ <item name="collapseIcon">?attr/homeAsUpIndicator</item>
+ <item name="collapseContentDescription">@string/abc_toolbar_collapse_description</item>
+ <item name="contentInsetStart">16dp</item>
+ <item name="android:paddingLeft">@dimen/abc_action_bar_default_padding_start_material</item>
+ <item name="android:paddingRight">@dimen/abc_action_bar_default_padding_end_material</item>
</style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabBar" parent="Widget.AppCompat.Base.ActionBar.TabBar"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabBar.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.TabBar"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabText" parent="Widget.AppCompat.Base.ActionBar.TabText"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabText.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.TabText">
- <item name="android:textColor">?android:attr/textColorPrimaryInverseDisableOnly</item>
+ <style name="Base.Widget.AppCompat.Toolbar.Button.Navigation" parent="android:Widget">
+ <item name="android:background">?attr/controlBackground</item>
+ <item name="android:minWidth">56dp</item>
+ <item name="android:scaleType">center</item>
</style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/themes_base.xml -->
+ <eat-comment/>
+ <style name="Platform.AppCompat" parent="android:Theme">
+ <item name="android:windowNoTitle">true</item>
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabView" parent="Widget.AppCompat.Base.ActionBar.TabView"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionBar.TabView.Inverse" parent="Widget.AppCompat.Light.Base.ActionBar.TabView"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionButton" parent="Widget.AppCompat.Base.ActionButton"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionButton.CloseMode" parent="Widget.AppCompat.Light.Base.ActionButton"></style>
-
- <style name="Widget.AppCompat.Light.Base.ActionButton.Overflow" parent="Widget.AppCompat.Light.Base.ActionButton">
- <item name="android:src">@drawable/abc_ic_menu_moreoverflow_normal_holo_light</item>
+ <!-- Window colors -->
+ <item name="android:colorForeground">@color/foreground_material_dark</item>
+ <item name="android:colorForegroundInverse">@color/foreground_material_light</item>
+ <item name="android:colorBackground">@color/background_material_dark</item>
+ <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_dark</item>
+ <item name="android:disabledAlpha">@dimen/abc_disabled_alpha_material_dark</item>
+ <item name="android:backgroundDimAmount">0.6</item>
+ <item name="android:windowBackground">@color/background_material_dark</item>
+
+ <!-- Text colors -->
+ <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
+ <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_light</item>
+ <item name="android:textColorPrimaryDisableOnly">@color/abc_primary_text_disable_only_material_dark</item>
+ <item name="android:textColorSecondary">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorSecondaryInverse">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorTertiary">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorTertiaryInverse">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorHint">@color/hint_foreground_material_dark</item>
+ <item name="android:textColorHintInverse">@color/hint_foreground_material_light</item>
+ <item name="android:textColorHighlight">@color/highlighted_text_material_dark</item>
+ <item name="android:textColorLink">?attr/colorAccent</item>
+
+ <!-- Text styles -->
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
+ <item name="android:textAppearanceInverse">@style/TextAppearance.AppCompat.Inverse</item>
+ <item name="android:textAppearanceLarge">@style/TextAppearance.AppCompat.Large</item>
+ <item name="android:textAppearanceLargeInverse">@style/TextAppearance.AppCompat.Large.Inverse</item>
+ <item name="android:textAppearanceMedium">@style/TextAppearance.AppCompat.Medium</item>
+ <item name="android:textAppearanceMediumInverse">@style/TextAppearance.AppCompat.Medium.Inverse</item>
+ <item name="android:textAppearanceSmall">@style/TextAppearance.AppCompat.Small</item>
+ <item name="android:textAppearanceSmallInverse">@style/TextAppearance.AppCompat.Small.Inverse</item>
+
+ <item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
+ <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
</style>
+ <style name="Platform.AppCompat.Light" parent="android:Theme.Light">
+ <item name="android:windowNoTitle">true</item>
- <style name="Widget.AppCompat.Light.Base.ActionMode.Inverse" parent="Widget.AppCompat.Base.ActionMode">
- <item name="titleTextStyle"> @style/TextAppearance.AppCompat.Widget.ActionMode.Title.Inverse</item>
- <item name="subtitleTextStyle"> @style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle.Inverse</item>
+ <!-- Window colors -->
+ <item name="android:colorForeground">@color/foreground_material_light</item>
+ <item name="android:colorForegroundInverse">@color/foreground_material_dark</item>
+ <item name="android:colorBackground">@color/background_material_light</item>
+ <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_light</item>
+ <item name="android:disabledAlpha">@dimen/abc_disabled_alpha_material_light</item>
+ <item name="android:backgroundDimAmount">0.6</item>
+ <item name="android:windowBackground">@color/background_material_light</item>
+
+ <!-- Text colors -->
+ <item name="android:textColorPrimary">@color/abc_primary_text_material_light</item>
+ <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_dark</item>
+ <item name="android:textColorSecondary">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorSecondaryInverse">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorTertiary">@color/abc_secondary_text_material_light</item>
+ <item name="android:textColorTertiaryInverse">@color/abc_secondary_text_material_dark</item>
+ <item name="android:textColorPrimaryDisableOnly">@color/abc_primary_text_disable_only_material_light</item>
+ <item name="android:textColorPrimaryInverseDisableOnly">@color/abc_primary_text_disable_only_material_dark</item>
+ <item name="android:textColorHint">@color/hint_foreground_material_light</item>
+ <item name="android:textColorHintInverse">@color/hint_foreground_material_dark</item>
+ <item name="android:textColorHighlight">@color/highlighted_text_material_light</item>
+ <item name="android:textColorLink">?attr/colorAccent</item>
+
+ <!-- Text styles -->
+ <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
+ <item name="android:textAppearanceInverse">@style/TextAppearance.AppCompat.Inverse</item>
+ <item name="android:textAppearanceLarge">@style/TextAppearance.AppCompat.Large</item>
+ <item name="android:textAppearanceLargeInverse">@style/TextAppearance.AppCompat.Large.Inverse</item>
+ <item name="android:textAppearanceMedium">@style/TextAppearance.AppCompat.Medium</item>
+ <item name="android:textAppearanceMediumInverse">@style/TextAppearance.AppCompat.Medium.Inverse</item>
+ <item name="android:textAppearanceSmall">@style/TextAppearance.AppCompat.Small</item>
+ <item name="android:textAppearanceSmallInverse">@style/TextAppearance.AppCompat.Small.Inverse</item>
+
+ <item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
+ <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
</style>
+ <style name="Platform.ThemeOverlay.AppCompat" parent=""/>
+ <style name="Platform.ThemeOverlay.AppCompat.Dark">
+ <!-- Action Bar styles -->
+ <item name="actionBarItemBackground">@drawable/abc_item_background_holo_dark</item>
+ <item name="actionDropDownStyle">@style/Widget.AppCompat.Spinner.DropDown.ActionBar</item>
+ <item name="selectableItemBackground">@drawable/abc_item_background_holo_dark</item>
- <style name="Widget.AppCompat.Light.Base.ActivityChooserView" parent="Widget.AppCompat.Base.ActivityChooserView">
- <item name="android:background">@drawable/abc_ab_share_pack_holo_light</item>
+ <!-- SearchView styles -->
+ <item name="android:autoCompleteTextViewStyle">@style/Widget.AppCompat.AutoCompleteTextView</item>
+ <item name="android:dropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinner</item>
</style>
+ <style name="Platform.ThemeOverlay.AppCompat.Light">
+ <item name="actionBarItemBackground">@drawable/abc_item_background_holo_light</item>
+ <item name="actionDropDownStyle">@style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar</item>
+ <item name="selectableItemBackground">@drawable/abc_item_background_holo_light</item>
- <style name="Widget.AppCompat.Light.Base.AutoCompleteTextView" parent="android:Widget.AutoCompleteTextView">
- <item name="android:textColor">?attr/actionMenuTextColor</item>
- <item name="android:dropDownSelector">@drawable/abc_list_selector_holo_light</item>
- <item name="android:popupBackground">@drawable/abc_menu_dropdown_panel_holo_light</item>
+ <!-- SearchView attributes -->
+ <item name="android:autoCompleteTextViewStyle">@style/Widget.AppCompat.Light.AutoCompleteTextView</item>
+ <item name="android:dropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinner</item>
</style>
-
- <style name="Widget.AppCompat.Light.Base.DropDownItem.Spinner" parent="Widget.AppCompat.Base.DropDownItem.Spinner"></style>
-
- <style name="Widget.AppCompat.Light.Base.ListPopupWindow" parent="">
- <item name="android:dropDownSelector">@drawable/abc_list_selector_holo_light</item>
- <item name="android:popupBackground">@drawable/abc_menu_dropdown_panel_holo_light</item>
- <item name="android:dropDownVerticalOffset">0dip</item>
- <item name="android:dropDownHorizontalOffset">0dip</item>
- <item name="android:dropDownWidth">wrap_content</item>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_base.xml -->
+ <eat-comment/>
+ <style name="Platform.Widget.AppCompat.Spinner" parent="android:Widget.Spinner"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles_rtl.xml -->
+ <eat-comment/>
+ <style name="RtlOverlay.DialogWindowTitle.AppCompat" parent="Base.DialogWindowTitle.AppCompat">
</style>
-
- <style name="Widget.AppCompat.Light.Base.ListView.DropDown" parent="android:Widget.ListView">
- <item name="android:listSelector">@drawable/abc_list_selector_holo_light</item>
+ <style name="RtlOverlay.Widget.AppCompat.ActionBar.TitleItem" parent="android:Widget">
+ <item name="android:layout_gravity">center_vertical|left</item>
+ <item name="android:paddingRight">8dp</item>
</style>
-
- <style name="Widget.AppCompat.Light.Base.PopupMenu" parent="@style/Widget.AppCompat.Light.Base.ListPopupWindow"></style>
-
- <style name="Widget.AppCompat.Light.Base.Spinner" parent="Widget.AppCompat.Base.Spinner">
- <item name="android:dropDownSelector">@drawable/abc_list_selector_holo_light</item>
- <item name="android:popupBackground">@drawable/abc_menu_dropdown_panel_holo_light</item>
- <item name="android:background">@drawable/abc_spinner_ab_holo_light</item>
+ <style name="RtlOverlay.Widget.AppCompat.DialogTitle.Icon" parent="android:Widget">
+ <item name="android:layout_marginRight">8dp</item>
</style>
- <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/klp-ub-dev/frameworks/support/v7/appcompat/res/values/styles.xml -->
- <eat-comment />
-
- <style name="Widget.AppCompat.Light.DropDownItem.Spinner" parent="Widget.AppCompat.Light.Base.DropDownItem.Spinner"></style>
-
- <style name="Widget.AppCompat.Light.ListPopupWindow" parent="Widget.AppCompat.Light.Base.ListPopupWindow"></style>
-
- <style name="Widget.AppCompat.Light.ListView.DropDown" parent="Widget.AppCompat.Light.Base.ListView.DropDown"></style>
-
- <style name="Widget.AppCompat.Light.PopupMenu" parent="Widget.AppCompat.Light.Base.PopupMenu"></style>
-
- <style name="Widget.AppCompat.Light.Spinner.DropDown.ActionBar" parent="Widget.AppCompat.Light.Base.Spinner"></style>
-
- <style name="Widget.AppCompat.ListPopupWindow" parent="Widget.AppCompat.Base.ListPopupWindow"></style>
-
- <style name="Widget.AppCompat.ListView.DropDown" parent="Widget.AppCompat.Base.ListView.DropDown"></style>
-
- <style name="Widget.AppCompat.ListView.Menu" parent="Widget.AppCompat.Base.ListView.Menu"></style>
-
- <style name="Widget.AppCompat.PopupMenu" parent="Widget.AppCompat.Base.PopupMenu"></style>
-
- <style name="Widget.AppCompat.ProgressBar" parent="Widget.AppCompat.Base.ProgressBar"></style>
-
- <style name="Widget.AppCompat.ProgressBar.Horizontal" parent="Widget.AppCompat.Base.ProgressBar.Horizontal"></style>
-
- <style name="Widget.AppCompat.Spinner.DropDown.ActionBar" parent="Widget.AppCompat.Base.Spinner"></style>
-
-</resources>
+ <style name="RtlOverlay.Widget.AppCompat.PopupMenuItem" parent="android:Widget">
+ <item name="android:paddingRight">16dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.PopupMenuItem.InternalGroup" parent="android:Widget">
+ <item name="android:layout_marginLeft">16dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.PopupMenuItem.Text" parent="android:Widget">
+ <item name="android:layout_alignParentLeft">true</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown" parent="android:Widget">
+ <item name="android:paddingLeft">@dimen/abc_dropdownitem_text_padding_left</item>
+ <item name="android:paddingRight">4dp</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Icon1" parent="android:Widget">
+ <item name="android:layout_alignParentLeft">true</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Icon2" parent="android:Widget">
+ <item name="android:layout_toLeftOf">@id/edit_query</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Query" parent="android:Widget">
+ <item name="android:layout_alignParentRight">true</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.Search.DropDown.Text" parent="Base.Widget.AppCompat.DropDownItem.Spinner">
+ <item name="android:layout_toLeftOf">@android:id/icon2</item>
+ <item name="android:layout_toRightOf">@android:id/icon1</item>
+ </style>
+ <style name="RtlOverlay.Widget.AppCompat.SearchView.MagIcon" parent="android:Widget">
+ <item name="android:layout_marginLeft">@dimen/abc_dropdownitem_text_padding_left</item>
+ </style>
+ <style name="RtlUnderlay.Widget.AppCompat.ActionButton" parent="android:Widget">
+ <item name="android:paddingLeft">12dp</item>
+ <item name="android:paddingRight">12dp</item>
+ </style>
+ <style name="RtlUnderlay.Widget.AppCompat.ActionButton.Overflow" parent="Base.Widget.AppCompat.ActionButton">
+ <item name="android:paddingLeft">@dimen/abc_action_bar_overflow_padding_start_material</item>
+ <item name="android:paddingRight">@dimen/abc_action_bar_overflow_padding_end_material</item>
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles.xml -->
+ <eat-comment/>
+ <style name="TextAppearance.AppCompat" parent="Base.TextAppearance.AppCompat"/>
+ <style name="TextAppearance.AppCompat.Body1" parent="Base.TextAppearance.AppCompat.Body1"/>
+ <style name="TextAppearance.AppCompat.Body2" parent="Base.TextAppearance.AppCompat.Body2"/>
+ <style name="TextAppearance.AppCompat.Button" parent="Base.TextAppearance.AppCompat.Button"/>
+ <style name="TextAppearance.AppCompat.Caption" parent="Base.TextAppearance.AppCompat.Caption"/>
+ <style name="TextAppearance.AppCompat.Display1" parent="Base.TextAppearance.AppCompat.Display1"/>
+ <style name="TextAppearance.AppCompat.Display2" parent="Base.TextAppearance.AppCompat.Display2"/>
+ <style name="TextAppearance.AppCompat.Display3" parent="Base.TextAppearance.AppCompat.Display3"/>
+ <style name="TextAppearance.AppCompat.Display4" parent="Base.TextAppearance.AppCompat.Display4"/>
+ <style name="TextAppearance.AppCompat.Headline" parent="Base.TextAppearance.AppCompat.Headline"/>
+ <style name="TextAppearance.AppCompat.Inverse" parent="Base.TextAppearance.AppCompat.Inverse"/>
+ <style name="TextAppearance.AppCompat.Large" parent="Base.TextAppearance.AppCompat.Large"/>
+ <style name="TextAppearance.AppCompat.Large.Inverse" parent="Base.TextAppearance.AppCompat.Large.Inverse"/>
+ <style name="TextAppearance.AppCompat.Light.SearchResult.Subtitle" parent="TextAppearance.AppCompat.SearchResult.Subtitle"/>
+ <style name="TextAppearance.AppCompat.Light.SearchResult.Title" parent="TextAppearance.AppCompat.SearchResult.Title"/>
+ <style name="TextAppearance.AppCompat.Light.Widget.PopupMenu.Large" parent="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
+ </style>
+ <style name="TextAppearance.AppCompat.Light.Widget.PopupMenu.Small" parent="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
+ </style>
+ <style name="TextAppearance.AppCompat.Medium" parent="Base.TextAppearance.AppCompat.Medium"/>
+ <style name="TextAppearance.AppCompat.Medium.Inverse" parent="Base.TextAppearance.AppCompat.Medium.Inverse"/>
+ <style name="TextAppearance.AppCompat.Menu" parent="Base.TextAppearance.AppCompat.Menu"/>
+ <style name="TextAppearance.AppCompat.SearchResult.Subtitle" parent="Base.TextAppearance.AppCompat.SearchResult.Subtitle">
+ </style>
+ <style name="TextAppearance.AppCompat.SearchResult.Title" parent="Base.TextAppearance.AppCompat.SearchResult.Title">
+ </style>
+ <style name="TextAppearance.AppCompat.Small" parent="Base.TextAppearance.AppCompat.Small"/>
+ <style name="TextAppearance.AppCompat.Small.Inverse" parent="Base.TextAppearance.AppCompat.Small.Inverse"/>
+ <style name="TextAppearance.AppCompat.Subhead" parent="Base.TextAppearance.AppCompat.Subhead"/>
+ <style name="TextAppearance.AppCompat.Subhead.Inverse" parent="Base.TextAppearance.AppCompat.Subhead.Inverse"/>
+ <style name="TextAppearance.AppCompat.Title" parent="Base.TextAppearance.AppCompat.Title"/>
+ <style name="TextAppearance.AppCompat.Title.Inverse" parent="Base.TextAppearance.AppCompat.Title.Inverse"/>
+ <style name="TextAppearance.AppCompat.Widget.ActionBar.Menu" parent="Base.TextAppearance.AppCompat.Widget.ActionBar.Menu">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.ActionBar.Subtitle" parent="Base.TextAppearance.AppCompat.Widget.ActionBar.Subtitle"/>
+ <style name="TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse" parent="Base.TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.ActionBar.Title" parent="Base.TextAppearance.AppCompat.Widget.ActionBar.Title"/>
+ <style name="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" parent="Base.TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.ActionMode.Subtitle" parent="Base.TextAppearance.AppCompat.Widget.ActionMode.Subtitle">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.AppCompat.Widget.ActionMode.Subtitle"/>
+ <style name="TextAppearance.AppCompat.Widget.ActionMode.Title" parent="Base.TextAppearance.AppCompat.Widget.ActionMode.Title">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.ActionMode.Title.Inverse" parent="TextAppearance.AppCompat.Widget.ActionMode.Title"/>
+ <style name="TextAppearance.AppCompat.Widget.Button" parent="Base.TextAppearance.AppCompat.Widget.Button"/>
+ <style name="TextAppearance.AppCompat.Widget.Button.Inverse" parent="Base.TextAppearance.AppCompat.Widget.Button.Inverse"/>
+ <style name="TextAppearance.AppCompat.Widget.DropDownItem" parent="Base.TextAppearance.AppCompat.Widget.DropDownItem">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.PopupMenu.Large" parent="Base.TextAppearance.AppCompat.Widget.PopupMenu.Large">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.PopupMenu.Small" parent="Base.TextAppearance.AppCompat.Widget.PopupMenu.Small">
+ </style>
+ <style name="TextAppearance.AppCompat.Widget.Switch" parent="Base.TextAppearance.AppCompat.Widget.Switch"/>
+ <style name="TextAppearance.AppCompat.Widget.TextView.SpinnerItem" parent="Base.TextAppearance.AppCompat.Widget.TextView.SpinnerItem"/>
+ <style name="TextAppearance.StatusBar.EventContent" parent=""/>
+ <style name="TextAppearance.StatusBar.EventContent.Info" parent=""/>
+ <style name="TextAppearance.StatusBar.EventContent.Line2" parent=""/>
+ <style name="TextAppearance.StatusBar.EventContent.Time" parent=""/>
+ <style name="TextAppearance.StatusBar.EventContent.Title" parent=""/>
+ <style name="TextAppearance.Widget.AppCompat.ExpandedMenu.Item" parent="Base.TextAppearance.Widget.AppCompat.ExpandedMenu.Item">
+ </style>
+ <style name="TextAppearance.Widget.AppCompat.Toolbar.Subtitle" parent="Base.TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
+ </style>
+ <style name="TextAppearance.Widget.AppCompat.Toolbar.Title" parent="Base.TextAppearance.Widget.AppCompat.Toolbar.Title">
+ </style>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/themes.xml -->
+ <eat-comment/>
+ <style name="Theme.AppCompat" parent="Base.Theme.AppCompat"/>
+ <style name="Theme.AppCompat.CompactMenu" parent="Base.Theme.AppCompat.CompactMenu"/>
+ <style name="Theme.AppCompat.Dialog" parent="Base.Theme.AppCompat.Dialog"/>
+ <style name="Theme.AppCompat.Dialog.Alert" parent="Base.Theme.AppCompat.Dialog.Alert"/>
+ <style name="Theme.AppCompat.Dialog.MinWidth" parent="Base.Theme.AppCompat.Dialog.MinWidth"/>
+ <style name="Theme.AppCompat.DialogWhenLarge" parent="Base.Theme.AppCompat.DialogWhenLarge">
+ </style>
+ <style name="Theme.AppCompat.Light" parent="Base.Theme.AppCompat.Light"/>
+ <style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar"/>
+ <style name="Theme.AppCompat.Light.Dialog" parent="Base.Theme.AppCompat.Light.Dialog"/>
+ <style name="Theme.AppCompat.Light.Dialog.Alert" parent="Base.Theme.AppCompat.Light.Dialog.Alert"/>
+ <style name="Theme.AppCompat.Light.Dialog.MinWidth" parent="Base.Theme.AppCompat.Light.Dialog.MinWidth"/>
+ <style name="Theme.AppCompat.Light.DialogWhenLarge" parent="Base.Theme.AppCompat.Light.DialogWhenLarge">
+ </style>
+ <style name="Theme.AppCompat.Light.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
+ <style name="Theme.AppCompat.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
+ <style name="ThemeOverlay.AppCompat" parent="Base.ThemeOverlay.AppCompat"/>
+ <style name="ThemeOverlay.AppCompat.ActionBar" parent="Base.ThemeOverlay.AppCompat.ActionBar"/>
+ <style name="ThemeOverlay.AppCompat.Dark" parent="Base.ThemeOverlay.AppCompat.Dark"/>
+ <style name="ThemeOverlay.AppCompat.Dark.ActionBar" parent="Base.ThemeOverlay.AppCompat.Dark.ActionBar"/>
+ <style name="ThemeOverlay.AppCompat.Light" parent="Base.ThemeOverlay.AppCompat.Light"/>
+ <!-- From: file:/usr/local/google/buildbot/src/googleplex-android/mnc-supportlib-release/frameworks/support/v7/appcompat/res/values/styles.xml -->
+ <eat-comment/>
+ <style name="Widget.AppCompat.ActionBar" parent="Base.Widget.AppCompat.ActionBar">
+ </style>
+ <style name="Widget.AppCompat.ActionBar.Solid" parent="Base.Widget.AppCompat.ActionBar.Solid">
+ </style>
+ <style name="Widget.AppCompat.ActionBar.TabBar" parent="Base.Widget.AppCompat.ActionBar.TabBar">
+ </style>
+ <style name="Widget.AppCompat.ActionBar.TabText" parent="Base.Widget.AppCompat.ActionBar.TabText">
+ </style>
+ <style name="Widget.AppCompat.ActionBar.TabView" parent="Base.Widget.AppCompat.ActionBar.TabView">
+ </style>
+ <style name="Widget.AppCompat.ActionButton" parent="Base.Widget.AppCompat.ActionButton"/>
+ <style name="Widget.AppCompat.ActionButton.CloseMode" parent="Base.Widget.AppCompat.ActionButton.CloseMode"/>
+ <style name="Widget.AppCompat.ActionButton.Overflow" parent="Base.Widget.AppCompat.ActionButton.Overflow"/>
+ <style name="Widget.AppCompat.ActionMode" parent="Base.Widget.AppCompat.ActionMode">
+ </style>
+ <style name="Widget.AppCompat.ActivityChooserView" parent="Base.Widget.AppCompat.ActivityChooserView">
+ </style>
+ <style name="Widget.AppCompat.AutoCompleteTextView" parent="Base.Widget.AppCompat.AutoCompleteTextView">
+ </style>
+ <style name="Widget.AppCompat.Button" parent="Base.Widget.AppCompat.Button"/>
+ <style name="Widget.AppCompat.Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless"/>
+ <style name="Widget.AppCompat.Button.Borderless.Colored" parent="Base.Widget.AppCompat.Button.Borderless.Colored"/>
+ <style name="Widget.AppCompat.Button.ButtonBar.AlertDialog" parent="Base.Widget.AppCompat.Button.ButtonBar.AlertDialog"/>
+ <style name="Widget.AppCompat.Button.Colored" parent="Base.Widget.AppCompat.Button.Colored"/>
+ <style name="Widget.AppCompat.Button.Small" parent="Base.Widget.AppCompat.Button.Small"/>
+ <style name="Widget.AppCompat.ButtonBar" parent="Base.Widget.AppCompat.ButtonBar"/>
+ <style name="Widget.AppCompat.ButtonBar.AlertDialog" parent="Base.Widget.AppCompat.ButtonBar.AlertDialog"/>
+ <style name="Widget.AppCompat.CompoundButton.CheckBox" parent="Base.Widget.AppCompat.CompoundButton.CheckBox"/>
+ <style name="Widget.AppCompat.CompoundButton.RadioButton" parent="Base.Widget.AppCompat.CompoundButton.RadioButton"/>
+ <style name="Widget.AppCompat.CompoundButton.Switch" parent="Base.Widget.AppCompat.CompoundButton.Switch"/>
+ <style name="Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
+ <item name="color">?attr/colorControlNormal</item>
+ </style>
+ <style name="Widget.AppCompat.DropDownItem.Spinner" parent="RtlOverlay.Widget.AppCompat.Search.DropDown.Text"/>
+ <style name="Widget.AppCompat.EditText" parent="Base.Widget.AppCompat.EditText"/>
+ <style name="Widget.AppCompat.ImageButton" parent="Base.Widget.AppCompat.ImageButton"/>
+ <style name="Widget.AppCompat.Light.ActionBar" parent="Base.Widget.AppCompat.Light.ActionBar">
+ </style>
+ <style name="Widget.AppCompat.Light.ActionBar.Solid" parent="Base.Widget.AppCompat.Light.ActionBar.Solid">
+ </style>
+ <style name="Widget.AppCompat.Light.ActionBar.Solid.Inverse"/>
+ <style name="Widget.AppCompat.Light.ActionBar.TabBar" parent="Base.Widget.AppCompat.Light.ActionBar.TabBar">
+ </style>
+ <style name="Widget.AppCompat.Light.ActionBar.TabBar.Inverse"/>
+ <style name="Widget.AppCompat.Light.ActionBar.TabText" parent="Base.Widget.AppCompat.Light.ActionBar.TabText">
+ </style>
+ <style name="Widget.AppCompat.Light.ActionBar.TabText.Inverse" parent="Base.Widget.AppCompat.Light.ActionBar.TabText.Inverse">
+ </style>
+ <style name="Widget.AppCompat.Light.ActionBar.TabView" parent="Base.Widget.AppCompat.Light.ActionBar.TabView">
+ </style>
+ <style name="Widget.AppCompat.Light.ActionBar.TabView.Inverse"/>
+ <style name="Widget.AppCompat.Light.ActionButton" parent="Widget.AppCompat.ActionButton"/>
+ <style name="Widget.AppCompat.Light.ActionButton.CloseMode" parent="Widget.AppCompat.ActionButton.CloseMode"/>
+ <style name="Widget.AppCompat.Light.ActionButton.Overflow" parent="Widget.AppCompat.ActionButton.Overflow"/>
+ <style name="Widget.AppCompat.Light.ActionMode.Inverse" parent="Widget.AppCompat.ActionMode"/>
+ <style name="Widget.AppCompat.Light.ActivityChooserView" parent="Widget.AppCompat.ActivityChooserView"/>
+ <style name="Widget.AppCompat.Light.AutoCompleteTextView" parent="Widget.AppCompat.AutoCompleteTextView"/>
+ <style name="Widget.AppCompat.Light.DropDownItem.Spinner" parent="Widget.AppCompat.DropDownItem.Spinner"/>
+ <style name="Widget.AppCompat.Light.ListPopupWindow" parent="Widget.AppCompat.ListPopupWindow"/>
+ <style name="Widget.AppCompat.Light.ListView.DropDown" parent="Widget.AppCompat.ListView.DropDown"/>
+ <style name="Widget.AppCompat.Light.PopupMenu" parent="Base.Widget.AppCompat.Light.PopupMenu">
+ </style>
+ <style name="Widget.AppCompat.Light.PopupMenu.Overflow" parent="Base.Widget.AppCompat.Light.PopupMenu.Overflow">
+ </style>
+ <style name="Widget.AppCompat.Light.SearchView" parent="Widget.AppCompat.SearchView"/>
+ <style name="Widget.AppCompat.Light.Spinner.DropDown.ActionBar" parent="Widget.AppCompat.Spinner.DropDown.ActionBar"/>
+ <style name="Widget.AppCompat.ListPopupWindow" parent="Base.Widget.AppCompat.ListPopupWindow">
+ </style>
+ <style name="Widget.AppCompat.ListView" parent="Base.Widget.AppCompat.ListView"/>
+ <style name="Widget.AppCompat.ListView.DropDown" parent="Base.Widget.AppCompat.ListView.DropDown"/>
+ <style name="Widget.AppCompat.ListView.Menu" parent="Base.Widget.AppCompat.ListView.Menu">
+ </style>
+ <style name="Widget.AppCompat.PopupMenu" parent="Base.Widget.AppCompat.PopupMenu">
+ </style>
+ <style name="Widget.AppCompat.PopupMenu.Overflow" parent="Base.Widget.AppCompat.PopupMenu.Overflow">
+ </style>
+ <style name="Widget.AppCompat.PopupWindow" parent="Base.Widget.AppCompat.PopupWindow">
+ </style>
+ <style name="Widget.AppCompat.ProgressBar" parent="Base.Widget.AppCompat.ProgressBar">
+ </style>
+ <style name="Widget.AppCompat.ProgressBar.Horizontal" parent="Base.Widget.AppCompat.ProgressBar.Horizontal">
+ </style>
+ <style name="Widget.AppCompat.RatingBar" parent="Base.Widget.AppCompat.RatingBar"/>
+ <style name="Widget.AppCompat.SearchView" parent="Base.Widget.AppCompat.SearchView"/>
+ <style name="Widget.AppCompat.SearchView.ActionBar" parent="Base.Widget.AppCompat.SearchView.ActionBar"/>
+ <style name="Widget.AppCompat.SeekBar" parent="Base.Widget.AppCompat.SeekBar"/>
+ <style name="Widget.AppCompat.Spinner" parent="Base.Widget.AppCompat.Spinner"/>
+ <style name="Widget.AppCompat.Spinner.DropDown"/>
+ <style name="Widget.AppCompat.Spinner.DropDown.ActionBar"/>
+ <style name="Widget.AppCompat.Spinner.Underlined" parent="Base.Widget.AppCompat.Spinner.Underlined"/>
+ <style name="Widget.AppCompat.TextView.SpinnerItem" parent="Base.Widget.AppCompat.TextView.SpinnerItem"/>
+ <style name="Widget.AppCompat.Toolbar" parent="Base.Widget.AppCompat.Toolbar"/>
+ <style name="Widget.AppCompat.Toolbar.Button.Navigation" parent="Base.Widget.AppCompat.Toolbar.Button.Navigation"/>
+</resources>
\ No newline at end of file
+++ /dev/null
-# Ignore everything in this directory
-*
-# Except this file
-!.gitignore
\ No newline at end of file
--- /dev/null
+This hidden file is there to ensure there is an src folder.
+Once we support binary library this will go away.
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest
+ package="com.getbase.floatingactionbutton"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:versionCode="15"
+ android:versionName="1.10.1" >
+
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="22" />
+
+ <application />
+
+</manifest>
\ No newline at end of file
--- /dev/null
+int attr fab_addButtonColorNormal 0x7f010009
+int attr fab_addButtonColorPressed 0x7f010008
+int attr fab_addButtonPlusIconColor 0x7f01000b
+int attr fab_addButtonSize 0x7f01000a
+int attr fab_addButtonStrokeVisible 0x7f01000c
+int attr fab_colorDisabled 0x7f010002
+int attr fab_colorNormal 0x7f010003
+int attr fab_colorPressed 0x7f010001
+int attr fab_expandDirection 0x7f01000f
+int attr fab_icon 0x7f010004
+int attr fab_labelStyle 0x7f01000d
+int attr fab_labelsPosition 0x7f01000e
+int attr fab_plusIconColor 0x7f010000
+int attr fab_size 0x7f010005
+int attr fab_stroke_visible 0x7f010007
+int attr fab_title 0x7f010006
+int dimen fab_actions_spacing 0x7f030000
+int dimen fab_icon_size 0x7f030001
+int dimen fab_labels_margin 0x7f030002
+int dimen fab_plus_icon_size 0x7f030003
+int dimen fab_plus_icon_stroke 0x7f030004
+int dimen fab_shadow_offset 0x7f030005
+int dimen fab_shadow_radius 0x7f030006
+int dimen fab_size_mini 0x7f030007
+int dimen fab_size_normal 0x7f030008
+int dimen fab_stroke_width 0x7f030009
+int drawable fab_bg_mini 0x7f020000
+int drawable fab_bg_normal 0x7f020001
+int id down 0x7f040006
+int id fab_expand_menu_button 0x7f040000
+int id fab_label 0x7f040001
+int id left 0x7f040004
+int id mini 0x7f040002
+int id normal 0x7f040003
+int id right 0x7f040005
+int id up 0x7f040007
+int[] styleable AddFloatingActionButton { 0x7f010000 }
+int styleable AddFloatingActionButton_fab_plusIconColor 0
+int[] styleable FloatingActionButton { 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005, 0x7f010006, 0x7f010007 }
+int styleable FloatingActionButton_fab_colorDisabled 1
+int styleable FloatingActionButton_fab_colorNormal 2
+int styleable FloatingActionButton_fab_colorPressed 0
+int styleable FloatingActionButton_fab_icon 3
+int styleable FloatingActionButton_fab_size 4
+int styleable FloatingActionButton_fab_stroke_visible 6
+int styleable FloatingActionButton_fab_title 5
+int[] styleable FloatingActionsMenu { 0x7f010008, 0x7f010009, 0x7f01000a, 0x7f01000b, 0x7f01000c, 0x7f01000d, 0x7f01000e, 0x7f01000f }
+int styleable FloatingActionsMenu_fab_addButtonColorNormal 1
+int styleable FloatingActionsMenu_fab_addButtonColorPressed 0
+int styleable FloatingActionsMenu_fab_addButtonPlusIconColor 3
+int styleable FloatingActionsMenu_fab_addButtonSize 2
+int styleable FloatingActionsMenu_fab_addButtonStrokeVisible 4
+int styleable FloatingActionsMenu_fab_expandDirection 7
+int styleable FloatingActionsMenu_fab_labelStyle 5
+int styleable FloatingActionsMenu_fab_labelsPosition 6
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest
+ package="com.getbase.floatingactionbutton"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:versionCode="15"
+ android:versionName="1.10.1" >
+
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="22" />
+
+ <application />
+
+</manifest>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="com-getbase-floatingactionbutton-1-10-0-exploded-aar" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- if sdk.dir was not set from one of the property file, then
+ get it from the ANDROID_HOME env var.
+ This must be done before we load project.properties since
+ the proguard config can use sdk.dir -->
+ <property environment="env" />
+ <condition property="sdk.dir" value="${env.ANDROID_HOME}">
+ <isset property="env.ANDROID_HOME" />
+ </condition>
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
+ unless="sdk.dir"
+ />
+
+ <!--
+ Import per project custom build rules if present at the root of the project.
+ This is the place to put custom intermediary targets such as:
+ -pre-build
+ -pre-compile
+ -post-compile (This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir})
+ -post-package
+ -post-build
+ -pre-clean
+ -->
+ <import file="custom_rules.xml" optional="true" />
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
--- /dev/null
+# keep getters/setters in RotatingDrawable so that animations can still work.
+-keepclassmembers class com.getbase.floatingactionbutton.FloatingActionsMenu$RotatingDrawable {
+ void set*(***);
+ *** get*();
+}
--- /dev/null
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-22
+android.library=true
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <declare-styleable name="AddFloatingActionButton"><attr format="color" name="fab_plusIconColor"/></declare-styleable>
+ <declare-styleable name="FloatingActionButton"><attr format="color" name="fab_colorPressed"/><attr format="color" name="fab_colorDisabled"/><attr format="color" name="fab_colorNormal"/><attr format="reference" name="fab_icon"/><attr format="enum" name="fab_size"><enum name="normal" value="0"/><enum name="mini" value="1"/></attr><attr format="string" name="fab_title"/><attr format="boolean" name="fab_stroke_visible"/></declare-styleable>
+ <declare-styleable name="FloatingActionsMenu"><attr format="color" name="fab_addButtonColorPressed"/><attr format="color" name="fab_addButtonColorNormal"/><attr format="enum" name="fab_addButtonSize"><enum name="normal" value="0"/><enum name="mini" value="1"/></attr><attr format="color" name="fab_addButtonPlusIconColor"/><attr format="boolean" name="fab_addButtonStrokeVisible"/><attr format="reference" name="fab_labelStyle"/><attr format="enum" name="fab_labelsPosition"><enum name="left" value="0"/><enum name="right" value="1"/></attr><attr format="enum" name="fab_expandDirection"><enum name="up" value="0"/><enum name="down" value="1"/><enum name="left" value="2"/><enum name="right" value="3"/></attr></declare-styleable>
+ <!-- From: file:/Users/chalup/src/android-floating-action-button/library/src/main/res/values/dimens.xml -->
+ <eat-comment/>
+ <dimen name="fab_actions_spacing">16dp</dimen>
+ <dimen name="fab_icon_size">24dp</dimen>
+ <dimen name="fab_labels_margin">8dp</dimen>
+ <dimen name="fab_plus_icon_size">14dp</dimen>
+ <dimen name="fab_plus_icon_stroke">2dp</dimen>
+ <dimen name="fab_shadow_offset">3dp</dimen>
+ <dimen name="fab_shadow_radius">9dp</dimen>
+ <dimen name="fab_size_mini">40dp</dimen>
+ <dimen name="fab_size_normal">56dp</dimen>
+ <dimen name="fab_stroke_width">1dp</dimen>
+ <!-- From: file:/Users/chalup/src/android-floating-action-button/library/src/main/res/values/ids.xml -->
+ <eat-comment/>
+ <item name="fab_expand_menu_button" type="id"/>
+ <item name="fab_label" type="id"/>
+</resources>
\ No newline at end of file
--- /dev/null
+This hidden file is there to ensure there is an src folder.
+Once we support binary library this will go away.
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.owncloud.android.workaround.accounts"
- android:versionCode="0100024"
- android:versionName="1.0.24" >
+ android:versionCode="0100025"
+ android:versionName="1.0.25" >
<uses-sdk
android:minSdkVersion="16"
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.2.3'
+ classpath 'com.android.tools.build:gradle:1.3.0'
}
}
apply plugin: 'com.android.library'
-Subproject commit c8f6e5ad57ee27fdac39c7b14eb6ab1942a92d49
+Subproject commit 8966dbcee044cec726633fdfd208ea106cf176c0
# project structure.
# Project target.
-target=android-19
+target=android-23
android.library.reference.1=owncloud-android-library
android.library.reference.2=libs/android-support-appcompat-v7-exploded-aar
+android.library.reference.3=libs/com-getbase-floatingactionbutton-1-10-1-exploded-aar
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item
+ android:id="@android:id/background"
+ android:drawable="@color/owncloud_blue" />
+ <item android:id="@android:id/secondaryProgress">
+ <scale
+ android:drawable="@color/owncloud_blue"
+ android:scaleWidth="100%" />
+ </item>
+ <item android:id="@android:id/progress">
+ <scale
+ android:drawable="@color/owncloud_blue"
+ android:scaleWidth="100%" />
+ </item>
+
+</layer-list>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<animation-list
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:oneshot="false">
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_1" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_2" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_3" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_4" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_5" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_6" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_7" android:duration="50" />
+ <item android:drawable="@drawable/owncloud_progressbar_indeterminate_8" android:duration="50" />
+</animation-list>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/checker_16_16"
+ android:tileMode="repeat" />
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/black_semi_transparent"/>
+ <padding
+ android:left="@dimen/standard_padding"
+ android:top="4dp"
+ android:right="@dimen/standard_padding"
+ android:bottom="4dp"/>
+ <corners
+ android:radius="2dp"/>
+</shape>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/white"/>
+ <padding
+ android:left="@dimen/standard_padding"
+ android:top="4dp"
+ android:right="@dimen/standard_padding"
+ android:bottom="4dp"/>
+ <corners
+ android:radius="2dp"/>
+</shape>
\ No newline at end of file
android:gravity="center"\r
android:orientation="vertical"\r
android:padding="8dp" >\r
- \r
- <Button\r
- android:id="@+id/centeredRefreshButton"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center_horizontal"\r
+\r
+ <android.support.v7.widget.AppCompatButton\r
+ android:id="@+id/centeredRefreshButton"\r
+ style="@style/ownCloud.Button"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_gravity="center_horizontal"\r
android:layout_marginBottom="10dp"\r
- android:onClick="onRefreshClick"\r
- android:text="@string/auth_check_server"\r
- android:visibility="gone"\r
- android:contentDescription="@string/auth_check_server"/>\r
+ android:text="@string/auth_check_server"\r
+ android:visibility="gone"\r
+ android:contentDescription="@string/auth_check_server"/>\r
+\r
<TextView\r
android:id="@+id/instructions_message"\r
android:layout_width="wrap_content"\r
android:text="@string/auth_expired_basic_auth_toast" \r
android:visibility="gone"\r
android:layout_marginBottom="10dp"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_expired_basic_auth_toast"/>\r
<FrameLayout \r
android:id="@+id/hostUrlFrame"\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
- android:layout_marginBottom="10dp"\r
+ android:layout_marginBottom="0dp"\r
>\r
<EditText\r
android:id="@+id/hostUrlInput"\r
android:inputType="textUri"\r
android:drawablePadding="5dp"\r
android:paddingRight="55dp"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_host_address"\r
>\r
<requestFocus />\r
</EditText>\r
<ImageButton\r
android:id="@+id/embeddedRefreshButton"\r
- android:layout_width="48dp"\r
- android:layout_height="48dp"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
android:layout_gravity="center_vertical|right"\r
android:layout_marginRight="5dp"\r
android:padding="0dp"\r
android:scaleType="fitCenter"\r
- android:src="@drawable/ic_action_refresh_black"\r
+ android:src="@drawable/ic_action_refresh_grey"\r
android:onClick="onRefreshClick"\r
android:visibility="gone"\r
android:background="@android:color/transparent"\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dp"\r
android:gravity="center_vertical"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:text="@string/auth_testing_connection"\r
+ android:minHeight="32dp"\r
android:contentDescription="@string/auth_testing_connection"/>\r
\r
<CheckBox\r
android:checked="false"\r
android:onClick="onCheckClick"\r
android:text="@string/oauth_check_onoff"\r
+ android:textColor="@color/primary"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:textAppearance="?android:attr/textAppearanceSmall"\r
android:contentDescription="@string/oauth_check_onoff"\r
/>\r
android:text="@string/oauth2_url_endpoint_auth"\r
android:singleLine="true"\r
android:inputType="textUri"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:visibility="gone">\r
</EditText> \r
\r
android:text="@string/oauth2_url_endpoint_access"\r
android:singleLine="true"\r
android:inputType="textUri"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:visibility="gone">\r
<requestFocus />\r
</EditText> \r
android:ems="10"\r
android:hint="@string/auth_username"\r
android:inputType="textNoSuggestions"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_username"\r
/>\r
\r
android:hint="@string/auth_password"\r
android:inputType="textPassword"\r
android:drawablePadding="5dp"\r
- android:contentDescription="@string/auth_password"\r
+ android:textColorHint="@color/login_text_hint_color"\r
/>\r
\r
<TextView\r
android:text="@string/auth_unauthorized"\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dip"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_unauthorized"\r
/>\r
\r
android:layout_alignParentBottom="true"\r
android:orientation="vertical" >\r
\r
- <Button\r
+ <android.support.v7.widget.AppCompatButton\r
android:id="@+id/buttonOK"\r
+ android:theme="@style/Button.Primary"\r
+ style="@style/Button.Primary"\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
android:layout_gravity="center_horizontal"\r
android:enabled="false"\r
- android:onClick="onOkClick"\r
android:text="@string/setup_btn_connect"\r
android:contentDescription="@string/setup_btn_connect"/>\r
\r
android:paddingBottom="5dp"\r
android:paddingTop="5dp"\r
android:text="@string/auth_register"\r
- android:textColor="#0000FF"\r
+ android:textColor="@color/login_text_color"\r
android:contentDescription="@string/auth_register"/>\r
</LinearLayout>\r
\r
android:orientation="horizontal" >
<!-- 'OK' / 'CANCEL' BUTTONS CHANGE THEIR ORDER FROM ANDROID 4.0 ; THANKS, GOOGLE -->
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/cancel"
+ android:theme="@style/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/common_cancel" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/ok"
+ android:theme="@style/Button.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/thumbnail"\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
- android:layout_marginBottom="10dp"\r
+ android:layout_marginBottom="20dp"\r
android:layout_marginTop="10dp"\r
android:background="@color/login_logo_background_color"\r
android:src="@drawable/logo"\r
android:contentDescription="@string/app_name"/>\r
\r
- <Button\r
+ <android.support.v7.widget.AppCompatButton\r
android:id="@+id/centeredRefreshButton"\r
+ style="@style/ownCloud.Button"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:layout_gravity="center_horizontal"\r
android:layout_marginBottom="10dp"\r
- android:onClick="onRefreshClick"\r
android:text="@string/auth_check_server"\r
android:visibility="gone"\r
android:contentDescription="@string/auth_check_server"/>\r
android:text="@string/auth_expired_basic_auth_toast"\r
android:visibility="gone"\r
android:layout_marginBottom="10dp"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_expired_basic_auth_toast"/>\r
\r
<FrameLayout \r
android:id="@+id/hostUrlFrame"\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
- android:layout_marginBottom="10dp"\r
+ android:layout_marginBottom="0dp"\r
>\r
<EditText\r
android:id="@+id/hostUrlInput"\r
android:inputType="textUri"\r
android:drawablePadding="5dp"\r
android:paddingRight="55dp"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_host_address"\r
>\r
<requestFocus />\r
</EditText>\r
<ImageButton\r
android:id="@+id/embeddedRefreshButton"\r
- android:layout_width="48dp"\r
- android:layout_height="48dp"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
android:layout_gravity="center_vertical|right"\r
android:layout_marginRight="5dp"\r
android:padding="0dp"\r
android:scaleType="fitCenter"\r
- android:src="@drawable/ic_action_refresh_black"\r
- android:onClick="onRefreshClick"\r
+ android:src="@drawable/ic_action_refresh_grey"\r
android:visibility="gone"\r
android:background="@android:color/transparent"\r
android:contentDescription="@string/auth_refresh_button"\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dp"\r
android:gravity="center_vertical"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:text="@string/auth_testing_connection"\r
+ android:minHeight="32dp"\r
android:contentDescription="@string/auth_testing_connection"/>\r
\r
<CheckBox\r
android:onClick="onCheckClick"\r
android:text="@string/oauth_check_onoff"\r
android:textAppearance="?android:attr/textAppearanceSmall"\r
+ android:textColor="@color/primary"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/oauth_check_onoff"\r
/>\r
\r
android:layout_height="wrap_content"\r
android:ems="10"\r
android:enabled="false"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:text="@string/oauth2_url_endpoint_auth"\r
android:singleLine="true"\r
android:inputType="textUri"\r
android:text="@string/oauth2_url_endpoint_access"\r
android:singleLine="true"\r
android:inputType="textUri"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:visibility="gone"/>\r
\r
<EditText\r
android:ems="10"\r
android:hint="@string/auth_username"\r
android:inputType="textNoSuggestions"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_username"\r
/>\r
\r
android:ems="10"\r
android:hint="@string/auth_password"\r
android:inputType="textPassword"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_password"\r
/>\r
\r
android:drawablePadding="5dp"\r
android:gravity="center_vertical"\r
android:text="@string/auth_unauthorized"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_unauthorized"/>\r
\r
- <Button\r
+ <android.support.v7.widget.AppCompatButton\r
android:id="@+id/buttonOK"\r
+ android:theme="@style/Button.Primary"\r
+ style="@style/Button.Primary"\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
android:layout_gravity="center_horizontal"\r
android:enabled="false"\r
- android:onClick="onOkClick"\r
android:text="@string/setup_btn_connect"\r
android:contentDescription="@string/setup_btn_connect"/>\r
\r
android:paddingBottom="5dp"\r
android:paddingTop="5dp"\r
android:text="@string/auth_register"\r
- android:textColor="#0000FF"\r
+ android:textColor="@color/login_text_color"\r
+ android:textColorHint="@color/login_text_hint_color"\r
android:contentDescription="@string/auth_register"/>\r
\r
</LinearLayout>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <ListView
+ android:id="@+id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+</LinearLayout>
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/left_drawer"
- android:layout_width="240dp"
- android:layout_height="match_parent"
- android:layout_gravity="start"
- android:background="@color/background_color"
- android:baselineAligned="false"
- android:clickable="true"
- android:orientation="vertical"
- android:fitsSystemWindows="true">
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <RelativeLayout
+ android:id="@+id/left_drawer"
+ android:layout_width="240dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="start"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:fitsSystemWindows="true"
+ android:background="@color/background_color"
+ >
+
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<LinearLayout-->
+ <!--android:layout_width="match_parent"-->
+ <!--android:layout_height="wrap_content"-->
+ <!--android:layout_margin="5dp">-->
+
+ <!--<ImageView-->
+ <!--android:id="@+id/drawer_userIcon"-->
+ <!--android:layout_width="40dp"-->
+ <!--android:layout_height="40dp"-->
+ <!--android:src="@drawable/abc_ab_bottom_solid_dark_holo" />-->
- <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
- <!--<LinearLayout-->
- <!--android:layout_width="match_parent"-->
- <!--android:layout_height="wrap_content"-->
- <!--android:layout_margin="5dp">-->
+ <!--<TextView-->
+ <!--android:id="@+id/drawer_username"-->
+ <!--android:layout_width="wrap_content"-->
+ <!--android:layout_height="wrap_content"-->
+ <!--android:layout_gravity="center_vertical"-->
+ <!--android:layout_marginLeft="5dp"-->
+ <!--android:layout_marginStart="5dp"-->
+ <!--android:textAppearance="?android:attr/textAppearanceLarge" />-->
- <!--<ImageView-->
- <!--android:id="@+id/drawer_userIcon"-->
- <!--android:layout_width="40dp"-->
- <!--android:layout_height="40dp"-->
- <!--android:src="@drawable/abc_ab_bottom_solid_dark_holo" />-->
+ <!--</LinearLayout>-->
<!--<TextView-->
- <!--android:id="@+id/drawer_username"-->
- <!--android:layout_width="wrap_content"-->
- <!--android:layout_height="wrap_content"-->
- <!--android:layout_gravity="center_vertical"-->
- <!--android:layout_marginLeft="5dp"-->
- <!--android:layout_marginStart="5dp"-->
- <!--android:textAppearance="?android:attr/textAppearanceLarge" />-->
+ <!--android:layout_width="fill_parent"-->
+ <!--android:layout_height="2dip"-->
+ <!--android:background="@color/list_item_lastmod_and_filesize_text" />-->
- <!--</LinearLayout>-->
+ <ListView
+ android:id="@+id/drawer_list"
+ android:choiceMode="singleChoice"
+ android:layout_width="fill_parent"
+ android:layout_height="match_parent"
+ android:background="@color/background_color"
+ android:divider="@color/list_divider_background"
+ android:dividerHeight="1dp"
+ android:paddingTop="100dp" />
- <!--<TextView-->
- <!--android:layout_width="fill_parent"-->
- <!--android:layout_height="2dip"-->
- <!--android:background="@color/list_item_lastmod_and_filesize_text" />-->
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="100dp"
+ android:paddingTop="@dimen/standard_padding"
+ android:paddingBottom="@dimen/standard_padding"
+ android:background="@color/owncloud_blue_accent">
- <ListView
- android:id="@+id/drawer_list"
- android:layout_width="fill_parent"
- android:layout_height="match_parent"
- android:background="@color/background_color"
- android:choiceMode="singleChoice"
- />
-</LinearLayout>
\ No newline at end of file
+ <ImageView
+ android:id="@+id/itemIcon"
+ android:layout_width="24sp"
+ android:layout_height="24sp"
+ android:layout_marginLeft="@dimen/standard_padding"
+ android:layout_marginBottom="3dp"
+ android:layout_gravity="bottom"
+ android:src="@drawable/ic_account_circle"
+ />
+
+ <TextView
+ android:id="@+id/drawer_username"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:gravity="bottom"
+ android:orientation="vertical"
+ android:text="@string/app_name"
+ android:textColor="#FFF"
+ android:paddingLeft="22dp"
+ android:paddingRight="@dimen/standard_padding"
+ android:textSize="24sp"
+ android:ellipsize="end"
+ android:singleLine="true"
+ />
+ </LinearLayout>
+ </RelativeLayout>
+</merge>
\ No newline at end of file
android:layout_alignParentLeft="true"
android:orientation="horizontal"
android:background="@color/background_color"
- android:layout_marginTop="10dp"
- android:layout_marginBottom="10dp">
+ android:layout_marginTop="@dimen/standard_margin"
+ android:layout_marginBottom="@dimen/standard_margin"
+ android:minHeight="?android:attr/listPreferredItemHeight">
+
+ <ImageView
+ android:id="@+id/itemIcon"
+ android:layout_width="24sp"
+ android:layout_height="24sp"
+ android:layout_marginLeft="@dimen/standard_margin"
+ android:layout_gravity="center_vertical"
+ />
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemTitle"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="center_vertical"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:textColor="@color/textColor"
+ android:layout_height="wrap_content"
+ android:paddingLeft="22dp"
+ android:paddingRight="@dimen/standard_margin"
+ android:textColor="@color/drawerMenuTextColor"
android:text="@string/app_name"
- android:textAppearance="?android:attr/textAppearanceListItemSmall"
- android:minHeight="?android:attr/listPreferredItemHeightSmall"/>
+ android:textStyle="normal"
+ android:layout_gravity="center_vertical"
+ android:textSize="14sp"
+ />
</LinearLayout>
android:layout_width="fill_parent"
android:layout_height="56dp"
android:gravity="center_vertical"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:textColor="#000"
+ android:paddingLeft="@dimen/standard_padding"
+ android:paddingRight="@dimen/standard_padding"
+ android:textColor="@color/black"
android:textSize="18dp" />
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:weightSum="1" >
+
+ <ScrollView
+ android:id="@+id/scrollView1"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_marginBottom="@dimen/standard_margin"
+ android:layout_weight="1">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingLeft="@dimen/standard_padding"
+ android:paddingRight="@dimen/standard_padding">
+
+ <TextView
+ android:id="@+id/logTV"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/empty"
+ android:typeface="monospace"/>
+ </LinearLayout>
+ </ScrollView>
+
+ <LinearLayout
+ android:id="@+id/historyButtonBar"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_marginBottom="@dimen/standard_margin"
+ android:layout_marginLeft="@dimen/standard_margin"
+ android:layout_marginRight="@dimen/standard_margin">
+
+ <Button
+ android:id="@+id/cancelErrorLogButton"
+ android:theme="@style/Button"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
+ android:text="@string/error_log_exit" />
+
+ <android.support.v7.widget.AppCompatButton
+ android:id="@+id/sendErrorLogButton"
+ android:theme="@style/Button.Primary"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
+ android:text="@string/error_log_send" />
+
+ </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_margin="@dimen/standard_margin"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/file_actions_header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="@dimen/standard_padding"
+ android:textColor="@color/black"
+ android:visibility="gone"
+ />
+
+ <View
+ android:id="@+id/file_actions_header_divider"
+ android:layout_width="match_parent"
+ android:layout_height="2dp"
+ android:background="@color/owncloud_blue"
+ android:visibility="gone"
+ />
+
+ <ListView
+ android:id="@+id/file_actions_list"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ />
+
+</LinearLayout >
\ No newline at end of file
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="#F7F7F7"
+ android:background="@color/background_color"
android:orientation="vertical">
<TextView
android:id="@+id/fdScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:fillViewport="true"
>
<RelativeLayout
android:id="@+id/fdFileHeaderContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="16dp"
- android:layout_marginTop="4dp" >
+ android:layout_marginLeft="@dimen/standard_margin"
+ android:layout_marginRight="@dimen/standard_margin"
+ android:layout_marginTop="@dimen/standard_margin">
<ImageView
android:id="@+id/fdIcon"
android:id="@+id/fdDetailsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/standard_margin"
+ android:layout_marginRight="@dimen/standard_margin"
+ android:layout_marginTop="@dimen/standard_margin"
android:layout_below="@id/fdFileHeaderContainer" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true"
- android:layout_marginLeft="16dp" >
+ android:layout_alignParentTop="true" >
<TextView
android:id="@+id/fdTypeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="24dp"
android:text="@string/filedetails_type"
android:textAppearance="?android:attr/textAppearanceMedium" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
- android:layout_marginLeft="12dp"
+ android:layout_marginLeft="@dimen/standard_margin"
android:layout_toRightOf="@+id/fdLabelContainer" >
<TextView
android:id="@+id/fdType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="24dp"
android:text="@string/placeholder_filetype"
android:textAppearance="?android:attr/textAppearanceMedium" />
android:layout_height="wrap_content"
android:layout_below="@+id/fdDetailsContainer"
android:gravity="center_horizontal"
- android:layout_margin="16dp"
+ android:layout_margin="@dimen/standard_margin"
>
- <CheckBox
+ <android.support.v7.widget.AppCompatCheckBox
android:id="@+id/fdFavorite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
- android:text="@string/favorite" />
+ android:text="@string/favorite"
+ android:checked="false" />
<LinearLayout
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:progressDrawable="@android:drawable/progress_horizontal"
- android:indeterminate="false"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:indeterminate="false"
android:indeterminateOnly="false"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
- android:src="@drawable/btn_cancel"
+ android:src="@drawable/ic_cancel"
android:background="@android:color/transparent"
/>
android:layout_gravity="center"
android:gravity="center_vertical"
android:padding="20dp"
+ android:background="@color/black"
>
<TextView
android:id="@+id/progressText"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/dark_background_text_color"
android:text="@string/downloader_not_downloaded_yet"
android:layout_marginBottom="15dp"
/>
>
<ProgressBar android:id="@+id/progressBar"
- android:layout_width="0dp"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:progressDrawable="@android:drawable/progress_horizontal"
- android:indeterminate="false"
- android:indeterminateOnly="false"
-
- />
+ style="?android:attr/progressBarStyleHorizontal"
+ android:indeterminate="false"
+ android:indeterminateOnly="false"
+
+ />
<ImageButton
android:id="@+id/cancelBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
- android:src="@drawable/btn_cancel"
+ android:src="@drawable/ic_cancel"
android:background="@android:color/transparent"
/>
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="40dp"
+ android:textColor="@color/dark_background_text_color"
android:text="@string/downloader_download_failed_ticker"
/>
android:layout_height="match_parent"
android:background="@color/background_color"
android:gravity="center"
- tools:context=".ui.fragment.FilePreviewFragment" >
+ tools:context=".ui.fragment.FilePreviewFragment">
- <FrameLayout
+ <FrameLayout
android:id="@+id/visual_area"
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/image_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_margin="16dp"
+ android:layout_margin="@dimen/standard_margin"
android:layout_gravity="center"
android:contentDescription="@string/preview_image_description"
android:src="@drawable/logo" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
+ android:layout_margin="16dp"
/>
</RelativeLayout>
\ No newline at end of file
\r
<!-- The main content view -->\r
<LinearLayout\r
- xmlns:android="http://schemas.android.com/apk/res/android"\r
android:layout_width="match_parent"\r
android:layout_height="match_parent"\r
- android:background="@color/background_color"\r
- android:baselineAligned="false"\r
- android:orientation="horizontal"\r
- android:id="@+id/ListLayout"\r
- android:contentDescription="@string/list_layout"\r
- >\r
+ android:orientation="vertical">\r
\r
+ <ProgressBar android:id="@+id/progressBar"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="4dp"\r
+ android:padding="0dp"\r
+ android:layout_margin="0dp"\r
+ style="@style/Widget.ownCloud.TopProgressBar"\r
+ android:indeterminate="false"\r
+ android:indeterminateOnly="false"\r
+ android:background="@color/background_color"\r
+ android:visibility="visible"\r
+ />\r
\r
- <FrameLayout\r
- android:id="@+id/left_fragment_container"\r
- android:layout_width="0dp"\r
+ <LinearLayout\r
+ xmlns:android="http://schemas.android.com/apk/res/android"\r
+ android:layout_width="match_parent"\r
android:layout_height="match_parent"\r
- android:layout_weight="1" />\r
+ android:background="@color/background_color"\r
+\r
+ android:orientation="horizontal"\r
+ android:id="@+id/ListLayout"\r
+ android:contentDescription="@string/list_layout"\r
+ >\r
+\r
+ <FrameLayout\r
+ android:id="@+id/left_fragment_container"\r
+ android:layout_width="0dp"\r
+ android:layout_height="match_parent"\r
+ android:layout_weight="1" />\r
+\r
+ <FrameLayout\r
+ android:id="@+id/right_fragment_container"\r
+ android:layout_width="0dp"\r
+ android:layout_height="match_parent"\r
+ android:layout_weight="2" />\r
+ </LinearLayout>\r
\r
- <FrameLayout\r
- android:id="@+id/right_fragment_container"\r
- android:layout_width="0dp"\r
- android:layout_height="match_parent"\r
- android:layout_weight="2" />\r
</LinearLayout>\r
\r
<include\r
android:background="@color/background_color"
android:orientation="vertical" >
+ <ProgressBar android:id="@+id/progressBar"
+ android:layout_width="match_parent"
+ android:layout_height="4dp"
+ android:padding="0dp"
+ android:layout_margin="0dp"
+ style="@style/Widget.ownCloud.TopProgressBar"
+ android:indeterminate="false"
+ android:indeterminateOnly="false"
+ android:background="@color/background_color"
+ android:visibility="visible"
+ />
+
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:gravity="center"
android:orientation="horizontal" >
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/folder_picker_btn_cancel"
+ android:theme="@style/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/common_cancel" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/folder_picker_btn_choose"
+ android:theme="@style/Button.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal" >
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/ok"
+ android:theme="@style/Button.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/common_ok" />
-
- <Button
+
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/cancel"
+ android:theme="@style/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerCrop"\r
android:src="@drawable/ic_menu_archive"/>\r
\r
- <LinearLayout\r
+ <ImageView\r
+ android:id="@+id/sharedIcon"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:layout_gravity="top|right"\r
- android:orientation="vertical"\r
- android:layout_margin="4dp">\r
-\r
- <ImageView\r
- android:id="@+id/sharedIcon"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center"\r
- android:layout_marginBottom="4dp"\r
- android:src="@drawable/sharedlink" />\r
-\r
- <ImageView\r
- android:id="@+id/sharedWithMeIcon"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center"\r
- android:layout_marginTop="4dp"\r
- android:src="@drawable/shared_with_me"\r
- android:visibility="invisible" />\r
- </LinearLayout>\r
+ android:layout_margin="4dp"\r
+ android:src="@drawable/shared_via_link" />\r
\r
<ImageView\r
android:id="@+id/localFileIndicator"\r
android:layout_marginBottom="4dp"\r
android:layout_marginRight="4dp"\r
android:src="@drawable/ic_favorite" />\r
+\r
+ <ImageView\r
+ android:id="@+id/custom_checkbox"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_gravity="center_vertical|bottom"\r
+ android:layout_marginLeft="4dp"\r
+ android:layout_marginRight="4dp"\r
+ android:gravity=""\r
+ android:src="@android:drawable/checkbox_off_background" />\r
</FrameLayout>\r
\r
</LinearLayout>
\ No newline at end of file
android:layout_marginRight="10dp"\r
android:src="@drawable/ic_menu_archive" />\r
\r
- <LinearLayout\r
+ <ImageView\r
+ android:id="@+id/sharedIcon"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
+ android:layout_margin="4dp"\r
android:layout_gravity="top|right"\r
- android:orientation="vertical"\r
- android:layout_margin="2dp">\r
-\r
- <ImageView\r
- android:id="@+id/sharedIcon"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center"\r
- android:layout_marginBottom="2dp"\r
- android:src="@drawable/sharedlink" />\r
-\r
- <ImageView\r
- android:id="@+id/sharedWithMeIcon"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center"\r
- android:layout_marginTop="2dp"\r
- android:src="@drawable/shared_with_me"\r
- android:visibility="invisible" />\r
- </LinearLayout>\r
+ android:src="@drawable/shared_via_link" />\r
\r
<ImageView\r
android:id="@+id/localFileIndicator"\r
android:layout_marginRight="2dp"\r
android:src="@drawable/ic_favorite" />\r
\r
-\r
+ <ImageView\r
+ android:id="@+id/custom_checkbox"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_gravity="center_vertical|bottom"\r
+ android:layout_marginLeft="4dp"\r
+ android:layout_marginRight="4dp"\r
+ android:gravity=""\r
+ android:src="@android:drawable/checkbox_off_background"\r
+ android:elevation="30dp" />\r
\r
</FrameLayout>\r
\r
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
<TextView
android:id="@+id/footerText"
android:layout_width="match_parent"
- android:layout_height="56dp"
+ android:layout_height="wrap_content"
+ android:padding="@dimen/standard_padding"
android:layout_gravity="center"
android:gravity="center"
- android:textColor="@color/setup_text_hint" />
+ android:textColor="@color/secondaryTextColor"
+ />
</LinearLayout>
\ No newline at end of file
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:fab="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
+ xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_weight="1" >
+ android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_containing_list"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_weight="1"
+ android:layout_height="match_parent"
android:footerDividersEnabled="false"
android:visibility="visible" >
android:id="@+id/list_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:divider="@color/list_divider_background"
+ android:dividerHeight="1px"
android:visibility="visible" />
</android.support.v4.widget.SwipeRefreshLayout>
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
+ <com.getbase.floatingactionbutton.FloatingActionsMenu
+ android:id="@+id/fab_main"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
+ fab:fab_addButtonColorNormal="@color/owncloud_blue_accent"
+ fab:fab_addButtonColorPressed="@color/owncloud_blue"
+ fab:fab_addButtonPlusIconColor="@color/white"
+ fab:fab_labelStyle="@style/menu_labels_style"
+ android:layout_marginBottom="@dimen/standard_margin"
+ android:layout_marginRight="@dimen/standard_margin"
+ android:layout_marginEnd="@dimen/standard_margin"
+ android:visibility="gone">
+
+ <com.getbase.floatingactionbutton.FloatingActionButton
+ android:id="@+id/fab_upload"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ fab:fab_size="mini"
+ fab:fab_icon="@drawable/ic_action_upload"
+ fab:fab_colorNormal="@color/owncloud_blue_accent"
+ fab:fab_colorPressed="@color/owncloud_blue"
+ fab:fab_title=""/>
+
+ <com.getbase.floatingactionbutton.FloatingActionButton
+ android:id="@+id/fab_mkdir"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ fab:fab_size="mini"
+ fab:fab_icon="@drawable/ic_action_create_dir"
+ fab:fab_colorNormal="@color/owncloud_blue_accent"
+ fab:fab_colorPressed="@color/owncloud_blue"
+ fab:fab_title=""/>
+
+ <com.getbase.floatingactionbutton.FloatingActionButton
+ android:id="@+id/fab_upload_from_app"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ fab:fab_size="mini"
+ fab:fab_icon="@drawable/ic_import"
+ fab:fab_colorNormal="@color/owncloud_blue_accent"
+ fab:fab_colorPressed="@color/owncloud_blue"
+ fab:fab_title=""/>
+
+ </com.getbase.floatingactionbutton.FloatingActionsMenu>
+</RelativeLayout>
android:layout_width="match_parent"\r
android:background="@drawable/list_selector"\r
android:orientation="vertical"\r
- android:layout_height="56dp">\r
+ android:layout_height="72dp">\r
\r
<LinearLayout\r
android:layout_width="match_parent"\r
android:orientation="horizontal">\r
\r
<FrameLayout\r
- android:layout_width="56dp"\r
- android:layout_height="56dp"\r
+ android:layout_width="60dp"\r
+ android:layout_height="72dp"\r
+ android:paddingLeft="12dp"\r
+ android:paddingBottom="@dimen/standard_padding"\r
+ android:paddingTop="@dimen/standard_padding"\r
+ android:paddingRight="4dp"\r
android:focusable="false"\r
android:focusableInTouchMode="false">\r
\r
android:id="@+id/localFileIndicator"\r
android:layout_width="@dimen/file_icon_size"\r
android:layout_height="@dimen/file_icon_size"\r
- android:layout_gravity="center_vertical"\r
- android:layout_marginLeft="22dp"\r
+ android:layout_gravity="top|right"\r
+ android:layout_marginRight="4dp"\r
android:src="@drawable/local_file_indicator" />\r
\r
<ImageView\r
android:id="@+id/thumbnail"\r
android:layout_width="@dimen/file_icon_size"\r
android:layout_height="@dimen/file_icon_size"\r
- android:layout_gravity="center_vertical"\r
- android:layout_marginLeft="9dp"\r
+ android:layout_gravity="left|center_vertical"\r
android:src="@drawable/ic_menu_archive" />\r
\r
<ImageView\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:layout_gravity="bottom|right"\r
- android:layout_marginBottom="10dp"\r
- android:layout_marginRight="2dp"\r
+ android:layout_marginRight="4dp"\r
android:src="@drawable/ic_favorite" />\r
</FrameLayout>\r
\r
android:layout_width="0dp"\r
android:layout_height="match_parent"\r
android:layout_weight="1"\r
- android:gravity="center_vertical"\r
+ android:gravity="top"\r
+ android:paddingTop="@dimen/standard_padding"\r
android:orientation="vertical" >\r
\r
<TextView\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:layout_gravity="center_vertical"\r
- android:layout_marginLeft="4dp"\r
+ android:layout_marginLeft="0dp"\r
android:layout_marginRight="4dp"\r
android:ellipsize="middle"\r
android:singleLine="true"\r
android:text="TextView"\r
- android:textColor="#303030"\r
- android:textSize="16dip" />\r
+ android:textColor="@color/textColor"\r
+ android:textSize="@dimen/two_line_primary_text_size" />\r
\r
<LinearLayout\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
- android:layout_marginLeft="4dp"\r
+ android:layout_marginLeft="0dp"\r
android:layout_marginRight="4dp"\r
- android:weightSum="1">\r
+ android:orientation="horizontal">\r
\r
<TextView\r
- android:id="@+id/last_mod"\r
+ android:id="@+id/file_size"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
- android:text="TextView"\r
- android:layout_weight=".5"\r
+ android:text="Size MB"\r
android:textColor="@color/list_item_lastmod_and_filesize_text"\r
- android:textSize="12dip"/>\r
+ android:textSize="@dimen/two_line_secondary_text_size"/>\r
\r
<TextView\r
- android:id="@+id/file_size"\r
+ android:id="@+id/file_separator"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:gravity="right"\r
- android:text="TextView"\r
+ android:text=", "\r
android:textColor="@color/list_item_lastmod_and_filesize_text"\r
- android:layout_weight=".5"\r
- android:textSize="12dip"/>\r
+ android:textSize="@dimen/two_line_secondary_text_size"/>\r
+\r
+ <TextView\r
+ android:id="@+id/last_mod"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:gravity="right"\r
+ android:text="Mod Date"\r
+ android:textColor="@color/list_item_lastmod_and_filesize_text"\r
+ android:textSize="@dimen/two_line_secondary_text_size"/>\r
\r
</LinearLayout>\r
\r
</LinearLayout>\r
\r
- <LinearLayout\r
- android:layout_width="25dp"\r
- android:layout_height="match_parent"\r
- android:gravity="center_vertical"\r
- android:orientation="vertical">\r
-\r
- <ImageView\r
- android:id="@+id/sharedIcon"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center"\r
- android:layout_marginLeft="4dp"\r
- android:layout_marginBottom="4dp"\r
- android:layout_marginRight="4dp"\r
- android:src="@drawable/sharedlink" />\r
-\r
- <ImageView\r
- android:id="@+id/sharedWithMeIcon"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_gravity="center"\r
- android:layout_marginLeft="4dp"\r
- android:layout_marginRight="4dp"\r
- android:layout_marginTop="4dp"\r
- android:src="@drawable/shared_with_me"\r
- android:visibility="invisible" />\r
-\r
- </LinearLayout>\r
+ <ImageView\r
+ android:id="@+id/sharedIcon"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_gravity="center"\r
+ android:layout_marginTop="4dp"\r
+ android:layout_marginLeft="4dp"\r
+ android:layout_marginBottom="4dp"\r
+ android:layout_marginRight="4dp"\r
+ android:src="@drawable/shared_via_link" />\r
\r
<ImageView\r
android:id="@+id/custom_checkbox"\r
android:layout_height="wrap_content"\r
android:layout_gravity="center_vertical"\r
android:layout_marginLeft="4dp"\r
- android:layout_marginRight="4dp"\r
+ android:layout_marginRight="@dimen/standard_margin"\r
android:gravity=""\r
- android:src="@android:drawable/checkbox_off_background" />\r
+ android:src="@drawable/ic_checkbox_blank_outline" />\r
</LinearLayout>\r
\r
<View\r
android:clickable="true"
android:orientation="vertical"
android:background="#fff"
- android:paddingLeft="16dp"
+ android:paddingLeft="@dimen/standard_padding"
tools:context=".MainActivity" >
<TextView
android:layout_height="wrap_content"
android:drawablePadding="5dp"
android:gravity="center_vertical"
- android:paddingLeft="16dp"
+ android:paddingLeft="@dimen/standard_padding"
android:textSize="16dp" >
</TextView>
android:layout_height="56dp"
android:layout_marginLeft="8dp"
android:gravity="left"
- android:paddingLeft="16dp"
+ android:paddingLeft="@dimen/standard_padding"
android:paddingTop="8dp"
android:textSize="16dp"
android:groupIndicator="@android:color/transparent"
android:id="@+id/loadingLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal" >
+ android:orientation="horizontal"
+ android:padding="@dimen/standard_padding">
<ProgressBar
android:id="@+id/loadingBar"
+ style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginBottom="10dp"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="5dp"
- android:layout_marginTop="10dp" />
+ android:indeterminate="true"
+ android:indeterminateOnly="false"/>
<TextView
android:id="@+id/loadingText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginRight="20dp"
+ android:layout_marginLeft="@dimen/standard_margin"
android:text="TextView" />
</LinearLayout>
android:textStyle="bold"
android:textSize="22dp"
android:textColor="#000000"
- android:layout_marginTop="5dp"
- android:layout_marginBottom="5dp" />
+ android:layout_marginBottom="@dimen/standard_margin" />
</LinearLayout>
\ No newline at end of file
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:padding="10dp"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
android:weightSum="1" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:layout_marginBottom="15dp"
- android:layout_weight="1" >
+ android:layout_marginBottom="@dimen/standard_margin"
+ android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:paddingLeft="@dimen/standard_padding"
+ android:paddingRight="@dimen/standard_padding">
<TextView
android:id="@+id/logTV"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:text="@string/empty" />
+ android:text="@string/empty"
+ android:typeface="monospace"/>
</LinearLayout>
</ScrollView>
+ <LinearLayout
+ android:id="@+id/historyButtonBar"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_marginBottom="@dimen/standard_margin"
+ android:layout_marginLeft="@dimen/standard_margin"
+ android:layout_marginRight="@dimen/standard_margin">
+
<Button
android:id="@+id/deleteLogHistoryButton"
- android:layout_width="match_parent"
- android:layout_height="50dp"
+ android:theme="@style/Button"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
android:text="@string/prefs_log_delete_history_button" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/sendLogHistoryButton"
- android:layout_width="match_parent"
- android:layout_height="50dp"
+ android:theme="@style/Button.Primary"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
android:text="@string/log_send_history_button" />
+ </LinearLayout>
+
</LinearLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical">
+
+ <ProgressBar
+ style="?android:attr/progressBarStyleHorizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/migrationProgress"
+ android:layout_gravity="center_horizontal"
+ android:progress="50"
+ android:paddingLeft="30dp"
+ android:paddingRight="30dp"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text=""
+ android:id="@+id/migrationText"
+ android:layout_gravity="center_horizontal"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/drawer_close"
+ android:id="@+id/finishButton"
+ android:layout_gravity="center_horizontal"/>
+</LinearLayout>
\ No newline at end of file
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:oc="http://schemas.android.com/apk/res/com.owncloud.android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
- android:padding="20dp" >
+ android:padding="@dimen/standard_padding" >
<TextView
android:text="@string/pass_code_enter_pass_code"
android:textColor="@android:color/black"
android:gravity="center_horizontal"
+ android:textSize="16sp"
/>
<TextView
android:text="@string/pass_code_configure_your_pass_code_explanation"
android:textAppearance="@android:style/TextAppearance.Small"
android:gravity="center_horizontal"
+ android:textSize="14sp"
/>
<LinearLayout
/>
</LinearLayout>
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/cancel"
+ android:theme="@style/Button.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/common_cancel" />
android:indeterminateOnly="true"
android:layout_centerInParent="true"
/>
-
+
<third_parties.michaelOrtiz.TouchImageViewCustom
android:id="@+id/image"
android:layout_width="match_parent"
android:text="@string/placeholder_sentence"
android:textColor="@color/owncloud_blue_bright"
/>
-
+
</RelativeLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:id="@+id/search_layout"
+ android:minWidth="200dp">
+
+ <SearchView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/searchView"
+ android:hint="@string/share_search"/>
+
+ <ListView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/searchUsersListView"
+ android:scrollbars="vertical"/>
+
+</LinearLayout>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="com.owncloud.android.ui.activity.ShareActivity">
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/share_fragment_container">
+ </FrameLayout>
+
+</LinearLayout>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="com.owncloud.android.ui.fragment.ShareFileFragment"
+ android:id="@+id/shareScroll">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/background_material_light"
+ android:orientation="vertical"
+ >
+
+ <RelativeLayout
+ android:id="@+id/shareHeaderContainer"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="6dp"
+ android:layout_marginBottom="6dp"
+ android:background="@color/background_color">
+
+ <ImageView
+ android:id="@+id/shareFileIcon"
+ android:layout_width="@dimen/file_icon_size"
+ android:layout_height="@dimen/file_icon_size"
+ android:src="@drawable/file"
+ android:layout_marginLeft="12dp"
+ android:layout_marginRight="12dp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="12dp"/>
+
+ <TextView
+ android:id="@+id/shareFileName"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/placeholder_filename"
+ android:textSize="16sp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="4dp"
+ android:layout_marginStart="4dp"
+ android:layout_marginRight="8dp"
+ android:layout_marginEnd="8dp"
+ android:layout_toRightOf="@+id/shareFileIcon"
+ android:layout_toEndOf="@+id/shareFileIcon"
+ android:singleLine="true"
+ android:ellipsize="middle"
+ android:layout_marginTop="12dp"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="12sp"
+ android:text="@string/placeholder_filesize"
+ android:id="@+id/shareFileSize"
+ android:layout_below="@+id/shareFileName"
+ android:layout_toRightOf="@+id/shareFileIcon"
+ android:layout_toEndOf="@+id/shareFileIcon"
+ android:layout_marginTop="4dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="12dp"
+ android:layout_gravity="center_vertical"/>
+
+ </RelativeLayout>
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="16sp"
+ android:text="@string/share_with_user_section_title"
+ android:id="@+id/shareWithUsersSectionTitle"
+ android:layout_gravity="start"
+ android:padding="8dp"
+ android:background="@color/actionbar_start_color"
+ android:textColor="@color/white"/>
+
+ <ListView
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:id="@+id/shareUsersList"
+ android:visibility="gone"
+ android:scrollbars="vertical"
+ android:layout_weight="1"/>
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/shareNoUsers"
+ android:text="@string/share_no_users"
+ android:textSize="12sp"
+ android:padding="12dp" />
+
+ <android.support.v7.widget.AppCompatButton
+ android:id="@+id/addUserButton"
+ style="@style/ownCloud.Button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/share_add_user_or_group"
+ android:contentDescription="shareAddUserButton"/>
+
+ <Switch
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="16sp"
+ android:text="@string/share_via_link_section_title"
+ android:id="@+id/shareViaLinkSectionSwitch"
+ android:layout_gravity="start"
+ android:padding="8dp"
+ android:background="@color/actionbar_start_color"
+ android:textColor="@color/white"/>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/shareViaLinkExpirationSection"
+ >
+
+ <Switch
+ android:id="@+id/shareViaLinkExpirationSwitch"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
+ android:layout_centerInParent="true"
+ android:padding="8dp"
+ />
+
+ <TextView
+ android:id="@+id/shareViaLinkExpirationLabel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:layout_toLeftOf="@id/shareViaLinkExpirationSwitch"
+ android:layout_toStartOf="@id/shareViaLinkExpirationSwitch"
+ android:paddingTop="8dp"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:text="@string/share_via_link_expiration_date_label"
+ android:textSize="16sp"
+ />
+
+ <TextView
+ android:id="@+id/shareViaLinkExpirationValue"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:layout_toLeftOf="@id/shareViaLinkExpirationSwitch"
+ android:layout_toStartOf="@id/shareViaLinkExpirationSwitch"
+ android:layout_below="@id/shareViaLinkExpirationLabel"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:paddingBottom="8dp"
+ android:textSize="12sp"
+ />
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/shareViaLinkPasswordSection"
+ >
+
+ <Switch
+ android:id="@+id/shareViaLinkPasswordSwitch"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
+ android:layout_centerInParent="true"
+ android:padding="8dp"
+ />
+
+ <TextView
+ android:id="@+id/shareViaLinkPasswordLabel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:layout_toLeftOf="@id/shareViaLinkPasswordSwitch"
+ android:layout_toStartOf="@id/shareViaLinkPasswordSwitch"
+ android:paddingTop="8dp"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:text="@string/share_via_link_password_label"
+ android:textSize="16sp"
+ />
+
+ <TextView
+ android:id="@+id/shareViaLinkPasswordValue"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:layout_toLeftOf="@id/shareViaLinkPasswordSwitch"
+ android:layout_toStartOf="@id/shareViaLinkPasswordSwitch"
+ android:layout_below="@id/shareViaLinkPasswordLabel"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:paddingBottom="8dp"
+ android:text="@string/share_via_link_password_title"
+ android:textSize="12sp"
+ android:visibility="invisible"
+ />
+
+ </RelativeLayout>
+
+ <android.support.v7.widget.AppCompatButton
+ android:id="@+id/shareViaLinkGetLinkButton"
+ style="@style/ownCloud.Button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/share_get_public_link_button"
+ android:contentDescription="shareGetLinkButton"/>
+
+ </LinearLayout>
+
+</ScrollView>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:weightSum="1"
+ android:longClickable="true">
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.9"
+ android:textSize="16dip"
+ android:text="@string/username"
+ android:id="@+id/userOrGroupName"
+ android:layout_margin="12dp"
+ android:textColor="@color/textColor"
+ android:singleLine="true"
+ android:ellipsize="middle"/>
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="0.1"
+ android:id="@+id/unshareButton"
+ android:src="@drawable/ic_cancel"
+ android:layout_marginRight="8dp"
+ android:layout_marginLeft="4dp"
+ android:layout_gravity="center_horizontal"/>
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="@color/list_divider_background"></View>
+</LinearLayout>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
+ android:textColor="@color/dialog_list_item"
+ android:textSize="16sp"
+ android:gravity="center_vertical"
+ android:paddingLeft="@dimen/standard_padding"
+ android:paddingRight="@dimen/standard_padding"
+ android:minHeight="48dp"/>
\ No newline at end of file
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
+ android:padding="@dimen/standard_padding"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
+ android:paddingBottom="@dimen/standard_padding"
android:text="@string/ssl_validator_header"
- android:padding="5dp"
android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@android:color/black"
/>
<TextView
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_cert_not_trusted"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_cert_expired"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_cert_not_yet_valid"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_hostname_not_verified"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_no_info_about_error"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<ScrollView
android:id="@+id/details_scroll"
android:visibility="gone"
- android:padding="20dp"
+ android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall"
/>
-
<TextView
android:id="@+id/label_signature"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall"
/>
-
-
+
<TextView
- android:id="@+id/value_signature"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:id="@+id/label_certificate_fingerprint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:paddingBottom="5dp"
- android:text=""
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
+ android:text="@string/ssl_validator_label_certificate_fingerprint"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+
+ <TextView
+ android:id="@+id/value_certificate_fingerprint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingBottom="5dp"
+ android:text=""
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
</LinearLayout>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
- android:padding="5dp"
+ android:paddingTop="@dimen/standard_padding"
android:text="@string/ssl_validator_question"
android:textAppearance="?android:attr/textAppearanceMedium"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="0"
android:gravity="center" >
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/cancel"
+ style="@style/Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="@string/common_cancel" />
+ android:text="@string/common_no" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/details_btn"
+ style="@style/Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_weight="1"
+ android:layout_weight="2"
android:text="@string/ssl_validator_btn_details_see" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/ok"
+ style="@style/Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="@string/common_ok" />
+ android:text="@string/common_yes" />
</LinearLayout>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:padding="@dimen/standard_padding">
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ssl_validator_header"
- android:padding="5dp"
+ android:paddingBottom="@dimen/standard_padding"
android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/black"
/>
-
+
<TextView
android:id="@+id/reason_cert_not_trusted"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_cert_not_trusted"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_cert_expired"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_cert_not_yet_valid"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
- android:paddingLeft="20dp"
+ android:paddingLeft="8dp"
android:text="@string/ssl_validator_reason_hostname_not_verified"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<ScrollView
android:id="@+id/details_scroll"
android:visibility="gone"
- android:padding="20dp"
+ android:padding="8dp"
android:layout_width="wrap_content"
android:layout_height="180dp">
android:id="@+id/question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:padding="5dp"
+ android:paddingTop="@dimen/standard_padding"
android:text="@string/ssl_validator_question"
android:textAppearance="?android:attr/textAppearanceMedium"
>
android:layout_height="wrap_content"
android:gravity="center" >
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/cancel"
+ style="@style/Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="@string/common_cancel" />
+ android:text="@string/common_no" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/details_btn"
+ style="@style/Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_weight="1"
+ android:layout_weight="2"
android:text="@string/ssl_validator_btn_details_see" />
- <Button
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/ok"
+ style="@style/Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="@string/common_ok" />
+ android:text="@string/common_yes" />
</LinearLayout>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?><!--
+ ownCloud Android client application
+
+ Copyright (C) 2012-2013 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true">
+
+ <TextView
+ android:id="@+id/text_preview"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp"
+ android:layout_marginStart="8dp"
+ android:visibility="gone"/>
+</ScrollView>
\ No newline at end of file
<LinearLayout\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
+ android:orientation="horizontal">\r
+\r
+ <ImageView\r
+ android:layout_width="match_parent"\r
+ android:layout_height="1dp"\r
+ android:src="@drawable/uploader_list_separator"/>\r
+\r
+ </LinearLayout>\r
+\r
+ <LinearLayout\r
+ android:orientation="horizontal"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:paddingTop="8dp"\r
+ android:paddingLeft="16dp"\r
+ android:paddingRight="16dp">\r
+\r
+ <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"\r
+ android:id="@+id/drawer_radio_group"\r
+ android:layout_width="fill_parent"\r
+ android:layout_height="wrap_content"\r
+ android:gravity="center"\r
+ android:orientation="horizontal">\r
+\r
+ <RadioButton\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="@string/upload_copy_files"\r
+ android:id="@+id/upload_radio_copy"\r
+ android:paddingRight="8dp"\r
+ android:checked="false" />\r
+\r
+ <RadioButton\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="@string/upload_move_files"\r
+ android:id="@+id/upload_radio_move"\r
+ android:paddingRight="8dp"\r
+ android:checked="false" />\r
+ </RadioGroup>\r
+ </LinearLayout>\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
android:gravity="center"\r
- android:orientation="horizontal" >\r
+ android:orientation="horizontal"\r
+ android:paddingLeft="16dp"\r
+ android:paddingRight="16dp"\r
+ android:paddingBottom="16dp">\r
\r
- <Button\r
+ <android.support.v7.widget.AppCompatButton\r
android:id="@+id/upload_files_btn_cancel"\r
+ android:theme="@style/Button"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:layout_weight="1"\r
android:text="@string/common_cancel" />\r
\r
- <Button\r
+ <android.support.v7.widget.AppCompatButton\r
android:id="@+id/upload_files_btn_upload"\r
+ android:theme="@style/Button.Primary"\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
android:layout_weight="1"\r
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content" android:orientation="vertical"
- android:layout_width="wrap_content" android:background="#fefefe"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:background="@color/white"
android:gravity="center">
- <TextView android:layout_width="fill_parent"
- android:text="@string/uploader_top_message"
- android:layout_height="wrap_content"
- android:id="@+id/drawer_username"
- android:textColor="@android:color/black"
- android:gravity="center_horizontal">
- </TextView>
-
- <FrameLayout android:layout_height="fill_parent"
+ <FrameLayout
+ android:layout_height="fill_parent"
android:layout_width="fill_parent"
- android:id="@+id/frameLayout1"
- android:layout_below="@+id/drawer_username"
- android:layout_above="@+id/linearLayout1">
+ android:id="@+id/upload_list"
+ android:layout_above="@+id/upload_actions">
- <ListView android:id="@android:id/list"
+ <ListView
+ android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:divider="@drawable/uploader_list_separator"
- android:dividerHeight="1dip">
+ android:divider="@color/list_divider_background"
+ android:dividerHeight="1dp">
</ListView>
</FrameLayout>
<LinearLayout
- android:id="@+id/linearLayout1"
+ android:id="@+id/upload_actions"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
- <Button
- android:id="@+id/uploader_new_folder"
+ <android.support.v7.widget.AppCompatButton
+ android:theme="@style/Button"
+ android:id="@+id/uploader_cancel"
+ style="@style/ownCloud.Button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
- android:text="@string/uploader_btn_new_folder_text" />
-
- <Button
+ android:text="@string/common_cancel" />
+
+ <android.support.v7.widget.AppCompatButton
android:id="@+id/uploader_choose_folder"
+ android:theme="@style/Button.Primary"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:background="#fefefe"
- android:orientation="horizontal"
- android:layout_height="56dp" >
-
- <ImageView
- android:layout_width="20dp"
- android:layout_height="20dp"
- android:layout_gravity="center_vertical|center"
- android:layout_margin="4dp"
- android:src="@drawable/ic_menu_archive"
- android:id="@+id/thumbnail" />
-
- <TextView
- android:text="TextView"
- android:layout_width="fill_parent"
- android:id="@+id/filename"
- android:layout_height="wrap_content"
- android:textColor="@android:color/black"
- android:layout_gravity="center_vertical"
- android:textSize="20dip"/>
-
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="72dp"
+ android:background="@drawable/list_selector"
+ android:orientation="horizontal">
+
+ <LinearLayout
+ android:layout_width="60dp"
+ android:layout_height="72dp"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/thumbnail"
+ android:layout_width="@dimen/file_icon_size"
+ android:layout_height="@dimen/file_icon_size"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="12dp"
+ android:src="@drawable/ic_menu_archive" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:gravity="top"
+ android:paddingTop="@dimen/standard_padding"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/filename"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginRight="4dp"
+ android:ellipsize="middle"
+ android:singleLine="true"
+ android:text="TextView"
+ android:textColor="@color/textColor"
+ android:textSize="16sp" />
+
+ <TextView
+ android:id="@+id/last_mod"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="4dp"
+ android:text="TextView"
+ android:textColor="@color/list_item_lastmod_and_filesize_text"
+ android:textSize="14sp" />
+
+ </LinearLayout>
+
</LinearLayout>
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item android:id="@+id/action_share_file" android:title="@string/action_share_file" android:icon="@android:drawable/ic_menu_share" android:orderInCategory="1" />
- <item android:id="@+id/action_unshare_file" android:title="@string/action_unshare_file" android:icon="@android:drawable/ic_menu_share" android:orderInCategory="1" />
- <item android:id="@+id/action_open_file_with" android:title="@string/actionbar_open_with" android:icon="@android:drawable/ic_menu_set_as" android:orderInCategory="1" />
- <item android:id="@+id/action_download_file" android:title="@string/filedetails_download" android:icon="@drawable/ic_action_download" android:orderInCategory="1" />
- <item android:id="@+id/action_sync_file" android:title="@string/filedetails_sync_file" android:icon="@drawable/ic_action_refresh" android:orderInCategory="1" />
- <item android:id="@+id/action_cancel_download" android:title="@string/common_cancel_download" android:icon="@android:drawable/ic_menu_close_clear_cancel" android:orderInCategory="1" />
- <item android:id="@+id/action_cancel_upload" android:title="@string/common_cancel_upload" android:icon="@android:drawable/ic_menu_close_clear_cancel" android:orderInCategory="1" />
- <item android:id="@+id/action_rename_file" android:title="@string/common_rename" android:icon="@android:drawable/ic_menu_edit" android:orderInCategory="1" />
- <item android:id="@+id/action_move" android:title="@string/actionbar_move" android:icon="@android:drawable/ic_menu_set_as" android:orderInCategory="1" />
- <item android:id="@+id/action_remove_file" android:title="@string/common_remove" android:icon="@android:drawable/ic_menu_delete" android:orderInCategory="1" />
- <item android:id="@+id/action_send_file" android:title="@string/actionbar_send_file" android:icon="@android:drawable/ic_menu_set_as" android:orderInCategory="1" />
- <item android:id="@+id/action_favorite_file" android:title="@string/favorite" android:icon="@android:drawable/ic_menu_set_as" android:orderInCategory="1" />
- <item android:id="@+id/action_unfavorite_file" android:title="@string/unfavorite" android:icon="@android:drawable/ic_menu_set_as" android:orderInCategory="1" />
- <item android:id="@+id/action_see_details" android:title="@string/actionbar_see_details" android:icon="@android:drawable/ic_menu_info_details" android:orderInCategory="1" />
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item
+ android:id="@+id/action_share_file"
+ android:title="@string/action_share"
+ android:icon="@android:drawable/ic_menu_share"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_stream_file"
+ android:title="@string/action_stream_file"
+ android:icon="@android:drawable/ic_menu_view"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_open_file_with"
+ android:title="@string/actionbar_open_with"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_download_file"
+ android:title="@string/filedetails_download"
+ android:icon="@drawable/ic_action_download"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_sync_file"
+ android:title="@string/filedetails_sync_file"
+ android:icon="@drawable/ic_action_refresh"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_cancel_sync"
+ android:title="@string/common_cancel_sync"
+ android:icon="@android:drawable/ic_menu_close_clear_cancel"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_rename_file"
+ android:title="@string/common_rename"
+ android:icon="@android:drawable/ic_menu_edit"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_move"
+ android:title="@string/actionbar_move"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_copy"
+ android:title="@android:string/copy"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_remove_file"
+ android:title="@string/common_remove"
+ android:icon="@android:drawable/ic_menu_delete"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_send_file"
+ android:title="@string/actionbar_send_file"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_favorite_file"
+ android:title="@string/favorite"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_unfavorite_file"
+ android:title="@string/unfavorite"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_set_as_wallpaper"
+ android:title="@string/set_picture_as"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_see_details"
+ android:title="@string/actionbar_see_details"
+ android:icon="@android:drawable/ic_menu_info_details"
+ android:orderInCategory="1" />
</menu>
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
- android:id="@+id/action_upload"
- android:icon="@drawable/ic_action_upload"
- android:orderInCategory="2"
- app:showAsAction="always"
- android:title="@string/actionbar_upload"
- android:contentDescription="@string/actionbar_upload"/>
- <item
android:id="@+id/action_create_dir"
android:icon="@drawable/ic_action_create_dir"
- android:orderInCategory="2"
- app:showAsAction="always"
+ android:orderInCategory="1"
+ app:showAsAction="never"
android:title="@string/actionbar_mkdir"
android:contentDescription="@string/actionbar_mkdir"/>
<item
+ android:id="@+id/action_switch_view"
+ android:icon="@drawable/ic_view_module"
+ android:orderInCategory="2"
+ app:showAsAction="never"
+ android:title="@string/action_switch_grid_view" />
+ <item
android:id="@+id/action_sync_account"
android:icon="@drawable/ic_action_refresh"
- android:orderInCategory="2"
+ android:orderInCategory="1"
app:showAsAction="never"
android:title="@string/actionbar_sync"
android:contentDescription="@string/actionbar_sync"/>
<item
android:id="@+id/action_sort"
- android:icon="@android:drawable/ic_menu_sort_by_size"
- android:orderInCategory="2"
+ android:icon="@drawable/ic_sort_variant"
+ android:orderInCategory="1"
app:showAsAction="never"
android:title="@string/actionbar_sort"
android:contentDescription="@string/actionbar_sort"/>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?><!--
+ ownCloud Android client application
+
+ Copyright (C) 2012 Bartek Przybylski
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/action_download_file"
+ android:title="@string/filedetails_download"
+ android:icon="@drawable/ic_action_download"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_move"
+ android:title="@string/actionbar_move"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_copy"
+ android:title="@android:string/copy"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_remove_file"
+ android:title="@string/common_remove"
+ android:icon="@android:drawable/ic_menu_delete"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_favorite_file"
+ android:title="@string/favorite"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/action_unfavorite_file"
+ android:title="@string/unfavorite"
+ android:icon="@android:drawable/ic_menu_set_as"
+ android:orderInCategory="1" />
+</menu>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+
+ Copyright (C) 2012 Bartek Przybylski
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/action_sort"
+ android:icon="@android:drawable/ic_menu_sort_by_size"
+ android:orderInCategory="2"
+ app:showAsAction="always"
+ android:title="@string/actionbar_sort"
+ android:contentDescription="@string/actionbar_sort"/>
+</menu>
\ No newline at end of file
<string name="auth_username">Gebruikersnaam</string>
<string name="auth_password">Wagwoord</string>
<string name="file_list_seconds_ago">sekondes gelede</string>
+ <string name="action_share">Deel</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nee</string>
<string name="common_ok">OK</string>
<string name="common_cancel">Kanseleer</string>
<string name="common_error">Fout</string>
+ <string name="activity_chooser_send_file_title">Stuur</string>
<string name="empty"></string>
<string name="folder_picker_choose_button_text">Kies</string>
+ <string name="share_via_link_expiration_date_label">Stel verval datum</string>
+ <string name="share_via_link_password_label">Beskerm met Wagwoord</string>
</resources>
<string name="drawer_item_settings">الإعدادات</string>
<string name="drawer_item_logs">سجلّ</string>
<string name="drawer_close">إغلاق</string>
+ <string name="drawer_open">افتح</string>
<string name="prefs_category_general">عام</string>
<string name="prefs_category_more">المزيد</string>
<string name="prefs_accounts">حسابات</string>
<string name="filedetails_created">انشئ في :</string>
<string name="filedetails_modified">عُدل في :</string>
<string name="filedetails_download">تحميل</string>
- <string name="filedetails_sync_file">تحديث الملف</string>
<string name="filedetails_renamed_in_upload_msg">تم تغيير اسم الملف إلى %1$s أثناء الرفع</string>
- <string name="action_share_file">شارك الرابط</string>
- <string name="action_unshare_file">الغاء مشاركة الرابط</string>
+ <string name="action_share">شارك</string>
<string name="common_yes">نعم</string>
<string name="common_no">لا</string>
<string name="common_ok">تم</string>
- <string name="common_cancel_download">إلغاء التحميل</string>
- <string name="common_cancel_upload">إلغاء الرفع</string>
<string name="common_cancel">إلغاء</string>
<string name="common_save_exit">حفظ + خروج</string>
<string name="common_error">خطأ</string>
<string name="favorite">المفضلة</string>
<string name="common_rename">إعادة التسمية</string>
<string name="common_remove">حذف</string>
- <string name="confirmation_remove_alert">هل تريد حقاً حذف %1$s ؟</string>
+ <string name="confirmation_remove_file_alert">هل تريد حقاً حذف %1$s ؟</string>
<string name="confirmation_remove_folder_alert">هل ترغب في حذف %1$s و جهات الإتصال التابعة له؟ </string>
<string name="confirmation_remove_local">محليا فقط</string>
- <string name="confirmation_remove_folder_local">المحتويات المحلية فقط</string>
- <string name="confirmation_remove_remote">الحذف من الخادم</string>
- <string name="confirmation_remove_remote_and_local">محليا و عن بعد</string>
+ <string name="confirmation_remove_folder_local">محليا فقط</string>
<string name="remove_success_msg">تم الحذف بنجاح</string>
<string name="remove_fail_msg">فشل الحذف</string>
<string name="rename_dialog_title">أدخل اسما جديدا</string>
<string name="folder_picker_choose_button_text">اختيار</string>
<string name="prefs_category_security">الأمان</string>
<string name="auth_host_address">عنوان الخادم</string>
+ <string name="share_dialog_title">مشاركة</string>
+ <string name="share_via_link_section_title">شارك الرابط</string>
+ <string name="share_via_link_expiration_date_label">تعيين تاريخ إنتهاء الصلاحية</string>
+ <string name="share_via_link_password_label">حماية كلمة السر</string>
+ <string name="share_search">البحث</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Aç</string>
<string name="prefs_category_general">Ümumi</string>
<string name="prefs_category_more">Daha da</string>
<string name="prefs_accounts">Hesablar</string>
<string name="filedetails_created">Yaradıldı:</string>
<string name="filedetails_modified">Dəyişdirildi:</string>
<string name="filedetails_download">Yüklə</string>
- <string name="filedetails_sync_file">Faylı yenilə</string>
<string name="filedetails_renamed_in_upload_msg">Yüklənmə müddətində fayl buna %1$s yeniləndi</string>
- <string name="action_share_file">Linki yayımla</string>
- <string name="action_unshare_file">Link yayımlanmasını dayandır</string>
+ <string name="action_share">Paylaş</string>
<string name="common_yes">Bəli</string>
<string name="common_no">Xeyir</string>
<string name="common_ok">Oldu</string>
- <string name="common_cancel_download">Endirimi dayandır</string>
- <string name="common_cancel_upload">Yüklənməni dayandır</string>
<string name="common_cancel">Dayandır</string>
<string name="common_save_exit">Saxla & Çıx</string>
<string name="common_error">Səhv</string>
<string name="favorite">İstəkli</string>
<string name="common_rename">Adı dəyiş</string>
<string name="common_remove">Sil</string>
- <string name="confirmation_remove_alert">Siz həqiqətən %1$s silmək istəyirsiniz?</string>
+ <string name="confirmation_remove_file_alert">Siz həqiqətən %1$s silmək istəyirsiniz?</string>
<string name="confirmation_remove_folder_alert">Siz həqiqətəndə %1$s və onun kontentini silmək istəyirsiniz?</string>
<string name="confirmation_remove_local">Yalnız daxili</string>
- <string name="confirmation_remove_folder_local">Yalnız daxili kontent</string>
- <string name="confirmation_remove_remote">Serverdən sil</string>
- <string name="confirmation_remove_remote_and_local">Uzaq və lokal</string>
+ <string name="confirmation_remove_folder_local">Yalnız daxili</string>
<string name="remove_success_msg">Silmə uğurlu oldu</string>
<string name="remove_fail_msg">Silmək mümkün olmadı</string>
<string name="rename_dialog_title">Yeni adı daxil edin</string>
<string name="downloader_download_file_not_found">Bu fayla serverdə artıq uzun müddətdir ki, çatmaq mümkün deyil</string>
<string name="prefs_category_accounts">Hesablar</string>
<string name="prefs_add_account">Hesab əlavə et</string>
- <string name="auth_redirect_non_secure_connection_title">Təhlükəsiz qoşulma, təhlükəsiz olmayan istiqamətə yönlədirilmişdir</string>
<string name="actionbar_logger">Jurnallar</string>
<string name="log_send_history_button">Tarixçəni göndər</string>
<string name="log_send_no_mail_app">Jurnalların ötürülməsi üçün proqram təminatı tapılmadı!</string>
<string name="move_file_invalid_overwrite">Fayl artıq mənsəb qovluğunda mövcuddur</string>
<string name="move_file_error">Fayl və ya qovluğun köçürülməsi müddətində səhv baş verdi</string>
<string name="forbidden_permissions_move">bu faylı köçürtmək</string>
+ <string name="copy_file_invalid_overwrite">Fayl artıq mənsəb qovluğunda mövcuddur</string>
<string name="prefs_category_instant_uploading">Anında yükləmələr</string>
<string name="prefs_category_security">Təhlükəsizlik</string>
<string name="prefs_instant_video_upload_path_title">Video ünvanını yüklə</string>
- <string name="download_folder_failed_content">Qovluğun endirilməsinin %1$s hissəsi tamamlana bilməz </string>
+ <string name="subject_user_shared_with_you">%1$s paylaşdı \"%2$s\" sizinlə</string>
<string name="auth_refresh_button">Qoşulmanı yenilə</string>
<string name="auth_host_address">Server ünvanı</string>
+ <string name="share_dialog_title">Paylaşılır</string>
+ <string name="share_via_link_section_title">Linki yayımla</string>
+ <string name="share_search">Axtarış</string>
</resources>
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <!--TODO re-enable when server-side folder size calculation is available
+ <item>Biggest - Smallest</item>-->
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<string name="drawer_item_accounts">Accounts</string>-->
+ <!--TODO re-enable when "On Device" is available
+ <string name="drawer_item_on_device">On device</string>-->
+ <string name="empty"></string>
+</resources>
<string name="drawer_item_settings">Настройки</string>
<string name="drawer_item_logs">Логове</string>
<string name="drawer_close">Затвори</string>
+ <string name="drawer_open">Отвори</string>
<string name="prefs_category_general">Общи</string>
<string name="prefs_category_more">Още</string>
<string name="prefs_accounts">Профили</string>
<string name="filedetails_created">Създаден на:</string>
<string name="filedetails_modified">Променен на:</string>
<string name="filedetails_download">Изтегляне</string>
- <string name="filedetails_sync_file">Обновяване на файла</string>
<string name="filedetails_renamed_in_upload_msg">Файлът беше преименуван на %1$s по време на качването.</string>
<string name="list_layout">Списък с изгледи</string>
- <string name="action_share_file">Връзка за споделяне</string>
- <string name="action_unshare_file">Премахване връзка за споделяне</string>
+ <string name="action_share">Споделяне</string>
<string name="common_yes">Да</string>
<string name="common_no">Не</string>
<string name="common_ok">ОК</string>
- <string name="common_cancel_download">Отказване на тегленето</string>
- <string name="common_cancel_upload">Отказване на качването</string>
<string name="common_cancel">Отказ</string>
<string name="common_save_exit">Запазване и изход</string>
<string name="common_error">Грешка</string>
<string name="favorite">Любими</string>
<string name="common_rename">Преименуване</string>
<string name="common_remove">Премахване</string>
- <string name="confirmation_remove_alert">Наистина ли искате да изтриете %1$s ?</string>
+ <string name="confirmation_remove_file_alert">Наистина ли искате да изтриете %1$s ?</string>
<string name="confirmation_remove_folder_alert">Наистина ли искате да премахнете %1$s и съдържанието му?</string>
<string name="confirmation_remove_local">Само локално</string>
- <string name="confirmation_remove_folder_local">Само локалното съдържание</string>
- <string name="confirmation_remove_remote">Премахване от сървъра</string>
- <string name="confirmation_remove_remote_and_local">Отдалечено и локално</string>
+ <string name="confirmation_remove_folder_local">Само локално</string>
<string name="remove_success_msg">Премахването успешно.</string>
<string name="remove_fail_msg">Неуспешно прехамхване.</string>
<string name="rename_dialog_title">Въведете ново име</string>
<string name="move_file_invalid_overwrite">Файлът вече съществува в отдалечената папка.</string>
<string name="move_file_error">Настъпи грешка при опита за преместване на този файл или папка.</string>
<string name="forbidden_permissions_move">за да преместиш този файл</string>
+ <string name="copy_file_invalid_overwrite">Файлът вече съществува в отдалечената папка.</string>
<string name="prefs_category_instant_uploading">Незабавно качване</string>
<string name="prefs_category_security">Сигурност</string>
<string name="prefs_instant_video_upload_path_title">Качване на видео път</string>
- <string name="download_folder_failed_content">Свалянето на директорията %1$s не може да бъде завършено</string>
<string name="shared_subject_header">споделен</string>
<string name="with_you_subject_header">с теб</string>
- <string name="subject_token">%1$s споделен \"%2$s\" с теб</string>
+ <string name="subject_user_shared_with_you">%1$s споделен \"%2$s\" с теб</string>
<string name="auth_refresh_button">Обнови връзката</string>
<string name="auth_host_address">Адрес на сървъра</string>
<string name="common_error_out_memory">Няма достатъчно памет</string>
<string name="file_list__footer__files">%1$d файла</string>
<string name="file_list__footer__files_and_folder">%1$d файла, 1 папка</string>
<string name="file_list__footer__files_and_folders">%1$d файла, %2$d папки</string>
+ <string name="share_dialog_title">Споделяне</string>
+ <string name="share_via_link_section_title">Връзка за споделяне</string>
+ <string name="share_via_link_expiration_date_label">Задаване на дата на изтичане</string>
+ <string name="share_via_link_password_label">Защитено с парола</string>
+ <string name="share_search">Търсене</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">খোল</string>
<string name="prefs_category_general">সাধারণ</string>
<string name="prefs_category_more">বেশী</string>
<string name="prefs_accounts">একাউন্ট</string>
<string name="filedetails_created">তৈরীর নির্ঘন্টঃ</string>
<string name="filedetails_modified">পরিবর্তিতঃ</string>
<string name="filedetails_download">ডাউনলোড</string>
- <string name="filedetails_sync_file">ফাইল নবোদ্যম করুন</string>
<string name="filedetails_renamed_in_upload_msg">আপলোডের সময় ফাইলের পূণঃনামকরণ করা হয়েছে %1$s</string>
- <string name="action_share_file">লিংক ভাগাভাগি করেন</string>
- <string name="action_unshare_file">লিংক ছিনন করেন</string>
+ <string name="action_share">ভাগাভাগি কর</string>
<string name="common_yes">হ্যাঁ</string>
<string name="common_no">না</string>
<string name="common_ok">তথাস্তু</string>
- <string name="common_cancel_download">ডাউনলোড বাতিল করেন</string>
- <string name="common_cancel_upload">আপলোড বাতিল কর</string>
<string name="common_cancel">বাতিল</string>
<string name="common_save_exit">সংরক্ষণ কর এবং &প্রস্থান</string>
<string name="common_error">সমস্যা</string>
<string name="favorite">প্রিয়জন</string>
<string name="common_rename">পূনঃনামকরণ</string>
<string name="common_remove">অপসারণ</string>
- <string name="confirmation_remove_alert">আপনি কি সত্যিই %1$s অপসারণ করতে চান?</string>
+ <string name="confirmation_remove_file_alert">আপনি কি সত্যিই %1$s অপসারণ করতে চান?</string>
<string name="confirmation_remove_folder_alert">আপনি কি সত্যিই %1$s এবং এর কনটেন্ট অপসারণ করতে চান?</string>
<string name="confirmation_remove_local">শুধুমাত্র লোকাল</string>
- <string name="confirmation_remove_folder_local">শুধুমাত্র লোকাল কনটেন্ট</string>
- <string name="confirmation_remove_remote">সার্ভসার থেকে অপসারণ কর</string>
- <string name="confirmation_remove_remote_and_local">দুরবর্তী ও স্থানীয়</string>
+ <string name="confirmation_remove_folder_local">শুধুমাত্র লোকাল</string>
<string name="remove_success_msg">অপসারণ সফল</string>
<string name="remove_fail_msg">অপসারণ ব্যার্থ</string>
<string name="rename_dialog_title">একটি নতুন নাম লিখুন</string>
<string name="downloader_download_file_not_found">সার্ভারে এই ফাইলটি আর প্রাপ্তব্য নয়</string>
<string name="prefs_category_accounts">একাউন্ট</string>
<string name="prefs_add_account">একাউন্ট যোগ কর</string>
+ <string name="auth_redirect_non_secure_connection_title">নিরাপদ সংযোগকে একটি অনিরাপদ পথে দিকবদল করা হয়েছে</string>
<string name="saml_authentication_wrong_pass">ভুল কুটশব্দ</string>
<string name="actionbar_move">সরাও</string>
<string name="file_list_empty_moving">এখানে কিছু নেই। একটি ফোল্ডার যোগ করতে পারেন!</string>
<string name="move_file_not_found">সরাতে ব্যার্থ হলো। ফাইলটি রয়েছে কিনা দেখুন।</string>
<string name="prefs_category_security">নিরাপত্তা</string>
<string name="auth_host_address">সার্ভার ঠিকানা</string>
+ <string name="share_dialog_title">ভাগাভাগিরত</string>
+ <string name="share_via_link_section_title">লিংক ভাগাভাগি করেন</string>
+ <string name="share_via_link_expiration_date_label">মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন</string>
+ <string name="share_via_link_password_label">কূটশব্দ সুরক্ষিত</string>
+ <string name="share_search">অনুসন্ধান</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">খোলা</string>
<string name="prefs_imprint">অঙ্কিত করা</string>
<string name="auth_username">ইউজারনেম</string>
<string name="sync_string_files">ফাইলস</string>
<string name="uploader_btn_new_folder_text">নতুন ফোল্ডার</string>
<string name="filedetails_download">ডাউনলোড করুন</string>
+ <string name="action_share">শেয়ার</string>
<string name="common_cancel">বাতিল করা</string>
<string name="common_error">ভুল</string>
<string name="uploader_info_dirname">ফোল্ডারের নাম</string>
<string name="common_rename">পুনঃনামকরণ</string>
<string name="common_remove">সরান</string>
<string name="empty"></string>
+ <string name="share_search">অনুসন্ধান</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Otvori</string>
<string name="prefs_category_more">Više</string>
<string name="prefs_help">Pomoć</string>
<string name="auth_username">Korisničko ime</string>
<string name="uploader_btn_upload_text">Učitaj</string>
<string name="uploader_btn_new_folder_text">Novi direktorij</string>
<string name="filedetails_download">Preuzmite</string>
- <string name="action_share_file">Podijelite vezu</string>
+ <string name="action_share">Dijeli</string>
<string name="common_yes">Da</string>
<string name="common_no">Ne</string>
<string name="common_ok">Ok</string>
- <string name="common_cancel_upload">Prekini učitavanje</string>
<string name="common_cancel">Odustani</string>
<string name="common_error">Greška</string>
<string name="common_error_unknown">Nepoznata greška</string>
<string name="folder_picker_choose_button_text">Izaberite</string>
<string name="prefs_category_security">Sigurnost</string>
<string name="auth_host_address">Adresa servera</string>
+ <string name="share_dialog_title">Dijeljenje</string>
+ <string name="share_via_link_section_title">Podijelite vezu</string>
+ <string name="share_via_link_expiration_date_label">Postavite datum isteka</string>
+ <string name="share_via_link_password_label">Zaštitita lozinkom</string>
+ <string name="share_search">Potraži</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_settings">configuració</string>
+ <string name="drawer_close">tanca</string>
+ <string name="drawer_open">Obre</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Més</string>
<string name="prefs_accounts">Comptes</string>
<string name="filedetails_created">Creat:</string>
<string name="filedetails_modified">Modificat:</string>
<string name="filedetails_download">Baixa</string>
- <string name="filedetails_sync_file">Actualitza el fitxer</string>
<string name="filedetails_renamed_in_upload_msg">L\'arxiu s\'ha canviat de nom a %1$s durant la càrrega</string>
- <string name="action_share_file">Enllaç de compartició</string>
- <string name="action_unshare_file">Deixa de compartir l\'enllaç</string>
+ <string name="action_share">Comparteix</string>
<string name="common_yes">Sí</string>
<string name="common_no">No</string>
<string name="common_ok">D\'acord</string>
- <string name="common_cancel_download">Cancelar la descàrrega</string>
- <string name="common_cancel_upload">Cancel·la la pujada</string>
<string name="common_cancel">Cancel·la</string>
<string name="common_save_exit">Desa & Surt</string>
<string name="common_error">Error</string>
<string name="favorite">Preferits</string>
<string name="common_rename">Reanomena</string>
<string name="common_remove">Elimina</string>
- <string name="confirmation_remove_alert">Esteu segur que voleu eliminar %1$s?</string>
+ <string name="confirmation_remove_file_alert">Esteu segur que voleu eliminar %1$s?</string>
<string name="confirmation_remove_folder_alert">Estàs segur que vols esborrar %1$s i els seus continguts?</string>
<string name="confirmation_remove_local">Només local</string>
- <string name="confirmation_remove_folder_local">Només contiguts locals</string>
- <string name="confirmation_remove_remote">Elimina del servidor</string>
- <string name="confirmation_remove_remote_and_local">Remot i local</string>
+ <string name="confirmation_remove_folder_local">Només local</string>
<string name="remove_success_msg">L\'eliminació ha tingut èxit</string>
<string name="remove_fail_msg">No s\'ha pogut completar l\'eliminació</string>
<string name="rename_dialog_title">Introdueix un nom nou</string>
<string name="downloader_download_file_not_found">El fitxer ja no està disponible en el servidor</string>
<string name="prefs_category_accounts">Comptes</string>
<string name="prefs_add_account">Afegeix compte</string>
+ <string name="auth_redirect_non_secure_connection_title">La connexió segura està essent redirigida a través d\'una ruta insegura</string>
<string name="log_progress_dialog_text">Carregant dades...</string>
<string name="saml_authentication_required_text">Es requereix autenticació</string>
<string name="saml_authentication_wrong_pass">Contrasenya incorrecta</string>
<string name="folder_picker_choose_button_text">Escull</string>
<string name="prefs_category_security">Seguretat</string>
<string name="auth_host_address">Adreça del servidor</string>
+ <string name="share_dialog_title">Compartir</string>
+ <string name="share_via_link_section_title">Comparteix l\'enllaç</string>
+ <string name="share_via_link_expiration_date_label">Estableix la data de venciment</string>
+ <string name="share_via_link_password_label">Protegir amb contrasenya</string>
+ <string name="share_search">Cerca</string>
</resources>
<string name="drawer_item_settings">Nastavení</string>
<string name="drawer_item_logs">Logy</string>
<string name="drawer_close">Zavřít</string>
+ <string name="drawer_open">Otevřít</string>
<string name="prefs_category_general">Obecné</string>
<string name="prefs_category_more">Více</string>
<string name="prefs_accounts">Účty</string>
<string name="file_list_seconds_ago">před pár sekundami</string>
<string name="file_list_empty">Žádný obsah. Nahrajte něco!</string>
<string name="file_list_loading">Načítání...</string>
+ <string name="file_list_no_app_for_file_type">Nebyla nalezena aplikace pro tento typ souboru!</string>
<string name="local_file_list_empty">V tomto adresáři nejsou žádné soubory.</string>
<string name="filedetails_select_file">Více informací získáte klepnutím na soubor.</string>
<string name="filedetails_size">Velikost:</string>
<string name="filedetails_created">Vytvořen:</string>
<string name="filedetails_modified">Upraven:</string>
<string name="filedetails_download">Stáhnout</string>
- <string name="filedetails_sync_file">Obnovit soubor</string>
+ <string name="filedetails_sync_file">Synchronizovat</string>
<string name="filedetails_renamed_in_upload_msg">Soubor byl v průběhu odesílání přejmenován na %1$s</string>
<string name="list_layout">Náhled seznamu</string>
- <string name="action_share_file">Sdílet odkaz</string>
- <string name="action_unshare_file">Zrušit sdílení odkazu</string>
+ <string name="action_share">Sdílet</string>
<string name="common_yes">Ano</string>
<string name="common_no">Ne</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Zrušit stahování</string>
- <string name="common_cancel_upload">Zrušit odesílání</string>
+ <string name="common_cancel_sync">Zrušit synchronizaci</string>
<string name="common_cancel">Zrušit</string>
<string name="common_save_exit">Uložit a ukončit</string>
<string name="common_error">Chyba</string>
<string name="unfavorite">Odebrat z oblíbených</string>
<string name="common_rename">Přejmenovat</string>
<string name="common_remove">Odstranit</string>
- <string name="confirmation_remove_alert">Opravdu chcete odstranit %1$s ?</string>
+ <string name="confirmation_remove_file_alert">Opravdu chcete odstranit %1$s ?</string>
<string name="confirmation_remove_folder_alert">Opravdu chcete odstranit %1$s a jeho obsah?</string>
<string name="confirmation_remove_local">Pouze místní</string>
- <string name="confirmation_remove_folder_local">Pouze místní obsah</string>
- <string name="confirmation_remove_remote">Odstranit ze serveru</string>
- <string name="confirmation_remove_remote_and_local">Oboje, místní i vzdálené</string>
+ <string name="confirmation_remove_folder_local">Pouze místní</string>
+ <string name="confirmation_remove_file_remote">Ze serveru</string>
+ <string name="confirmation_remove_remote_and_local">Vzdálený & místní</string>
<string name="remove_success_msg">Úspěšně odstraněno</string>
<string name="remove_fail_msg">Odstranění nelze dokončit</string>
<string name="rename_dialog_title">Zadejte nový název</string>
<string name="ssl_validator_label_validity_to">Pro:</string>
<string name="ssl_validator_label_signature">Podpis:</string>
<string name="ssl_validator_label_signature_algorithm">Alogritmus:</string>
+ <string name="digest_algorithm_not_available">Tento algoritmus není na vašem telefonu dostupný.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Otisk:</string>
+ <string name="certificate_load_problem">Došlo k problému s načtením certifikátu.</string>
<string name="ssl_validator_null_cert">Certifikát nemohl být zobrazen.</string>
<string name="ssl_validator_no_info_about_error">- Žádné informace o této chybě</string>
<string name="placeholder_sentence">Zástupný text</string>
<string name="conflict_title">Konflikt souboru</string>
<string name="conflict_message">Které soubory chcete ponechat? Pokud zvolíte obě verze, zkopírovaný soubor bude mít název doplněný o číslo.</string>
<string name="conflict_keep_both">Ponechat oba</string>
- <string name="conflict_use_local_version">Použít lokální verzi</string>
- <string name="conflict_use_server_version">Použít serverovou verzi</string>
+ <string name="conflict_use_local_version">místní verze</string>
+ <string name="conflict_use_server_version">serverová verze</string>
<string name="preview_image_description">Náhled obrázku</string>
<string name="preview_image_error_unknown_format">Obrázek nelze zobrazit</string>
<string name="error__upload__local_file_not_copied">%1$s nelze zkopírovat do místního adresáře %2$s</string>
<string name="share_link_file_error">Při pokusu o sdílení tohoto souboru či složky nastala chyba</string>
<string name="unshare_link_file_no_exist">Nelze ukončit sdílení. Zkontrolujte prosím že soubor existuje</string>
<string name="unshare_link_file_error">Při pokusu o zrušení sdílení tohoto souboru či složky nastala chyba</string>
+ <string name="update_link_file_no_exist">Nelze aktulizovat. Ověřte že soubor existuje</string>
+ <string name="update_link_file_error">Došlo k chybě při pokusu aktualizovat sdílený odkaz</string>
<string name="share_link_password_title">Zadejte heslo</string>
<string name="share_link_empty_password">Musíte zadat heslo</string>
<string name="activity_chooser_send_file_title">Odeslat</string>
<string name="forbidden_permissions_delete">smazat tento soubor</string>
<string name="share_link_forbidden_permissions">sdílet tento soubor</string>
<string name="unshare_link_forbidden_permissions">zrušit sdílení tohoto souboru</string>
+ <string name="update_link_forbidden_permissions">aktualizovat tento sdílený odkaz</string>
<string name="forbidden_permissions_create">vytvořit tento soubor</string>
<string name="uploader_upload_forbidden_permissions">nahrávat do tohoto adresáře</string>
<string name="downloader_download_file_not_found">Tento soubor již není dostupný na serveru</string>
<string name="prefs_category_accounts">Účty</string>
<string name="prefs_add_account">Přidat účet</string>
- <string name="auth_redirect_non_secure_connection_title">Bezpečné spojení je přesměrováno na nezabezpečenou trasu.</string>
+ <string name="auth_redirect_non_secure_connection_title">Zabezpečené spojení je přesměrováváno nezabezpečenou trasou.</string>
<string name="actionbar_logger">Logy</string>
<string name="log_send_history_button">Odeslat historii</string>
<string name="log_send_no_mail_app">Nebyla nalezena žádná aplikace pro odesílání logů. Nainstalujte poštovní aplikaci!</string>
<string name="move_file_invalid_overwrite">Soubor již v cílovém adresáři existuje</string>
<string name="move_file_error">Při pokusu o přesun tohoto souboru či složky nastala chyba</string>
<string name="forbidden_permissions_move">pro přesun tohoto souboru</string>
+ <string name="copy_file_not_found">Nelze zkopírpovat. Zkontrolujte prosím že soubor existuje</string>
+ <string name="copy_file_invalid_into_descendent">Není možné adresář zkopírovat do jeho vlastního podadresáře</string>
+ <string name="copy_file_invalid_overwrite">Soubor již v cílové složce existuje</string>
+ <string name="copy_file_error">Při pokusu o zkopírování tohoto souboru či složky došlo k chybě</string>
+ <string name="forbidden_permissions_copy">pro zkopírování tohoto souboru</string>
<string name="prefs_category_instant_uploading">Okamžitá odesílání</string>
<string name="prefs_category_security">Zabezpečení</string>
<string name="prefs_instant_video_upload_path_title">Cesta pro nahrávání videí</string>
- <string name="download_folder_failed_content">Stažení adresáře %1$s nemohlo být dokončeno</string>
+ <string name="sync_folder_failed_content">Synchronizaci adresáře %1$s nelze dokončit</string>
<string name="shared_subject_header">sdílené</string>
<string name="with_you_subject_header">s vámi</string>
- <string name="subject_token">%1$s s vámi sdílí \"%2$s\"</string>
- <string name="saml_subject_token">\"%1$s\" ti byl nasdílen</string>
+ <string name="subject_user_shared_with_you">%1$s s vámi sdílí \"%2$s\"</string>
+ <string name="subject_shared_with_you">\"%1$s\" ti byl nasdílen</string>
<string name="auth_refresh_button">Obnovit připojení</string>
<string name="auth_host_address">Adresa serveru</string>
<string name="common_error_out_memory">Nedostatek paměti</string>
<string name="file_list__footer__files">%1$d soubory(ů)</string>
<string name="file_list__footer__files_and_folder">%1$d soubory(ů), 1 adresář</string>
<string name="file_list__footer__files_and_folders">%1$d soubory(ů), %2$d adresáře(ů)</string>
+ <string name="share_dialog_title">Sdílení</string>
+ <string name="share_with_user_section_title">Sdílet s uživateli a skupinami</string>
+ <string name="share_no_users">Zatím nebyla s uživateli sdílena žádná data</string>
+ <string name="share_add_user_or_group">Přidat uživatele nebo skupinu</string>
+ <string name="share_via_link_section_title">Sdílet odkaz</string>
+ <string name="share_via_link_expiration_date_label">Nastavit datum vypršení platnosti</string>
+ <string name="share_via_link_password_label">Chránit heslem</string>
+ <string name="share_via_link_password_title">Zabezpečeno</string>
+ <string name="share_get_public_link_button">Vytvořit odkaz</string>
+ <string name="share_search">Hledat</string>
+ <string name="search_users_and_groups_hint">Prohledat uživatele a skupiny</string>
+ <string name="share_group_clarification">%1$s (skupina)</string>
+ <string name="share_sharee_unavailable">Omlouváme se, verze vašeho serveru neumožňuje v klientské aplikaci sdílení dat mezi uživateli.
+\nKontaktujte prosím svého administrátora</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Agor</string>
<string name="prefs_category_general">Cyffredinol</string>
<string name="prefs_accounts">Cyfrifon</string>
<string name="prefs_manage_accounts">Rheoli Cyfrifon</string>
<string name="filedetails_modified">Addaswyd:</string>
<string name="filedetails_download">Llwytho i lawr</string>
<string name="filedetails_renamed_in_upload_msg">Ailenwyd y ffeil i %1$s wrth lwytho i fyny</string>
+ <string name="action_share">Rhannu</string>
<string name="common_yes">Ie</string>
<string name="common_no">Na</string>
<string name="common_ok">Iawn</string>
- <string name="common_cancel_download">Diddymu llwytho i lawr</string>
- <string name="common_cancel_upload">Diddymu llwytho i fyny</string>
<string name="common_cancel">Diddymu</string>
<string name="common_save_exit">Cadw & Gadael</string>
<string name="common_error">Gwall</string>
<string name="common_rename">Ailenwi</string>
<string name="common_remove">Gwaredu</string>
<string name="confirmation_remove_local">Lleol yn unig</string>
- <string name="confirmation_remove_folder_local">Cynnwys lleol yn unig</string>
- <string name="confirmation_remove_remote">Gwaredu o\'r gweinydd</string>
- <string name="confirmation_remove_remote_and_local">Pell a lleol</string>
+ <string name="confirmation_remove_folder_local">Lleol yn unig</string>
<string name="remove_success_msg">Gwaredwyd yn llwyddiannus</string>
<string name="remove_fail_msg">Methwyd gwaredu</string>
<string name="rename_dialog_title">Rhowch enw newydd</string>
<string name="empty"></string>
<string name="prefs_category_accounts">Cyfrifon</string>
<string name="folder_picker_choose_button_text">Dewisiwch</string>
+ <string name="share_via_link_expiration_date_label">Gosod dyddiad dod i ben</string>
+ <string name="share_via_link_password_label">Diogelu cyfrinair</string>
+ <string name="share_search">Chwilio</string>
</resources>
<string name="drawer_item_settings">Indstillinger</string>
<string name="drawer_item_logs">Logregistreringer</string>
<string name="drawer_close">Luk</string>
+ <string name="drawer_open">Åbn</string>
<string name="prefs_category_general">Generel</string>
<string name="prefs_category_more">Mere</string>
<string name="prefs_accounts">Konti</string>
<string name="filedetails_created">Oprettet:</string>
<string name="filedetails_modified">Ændret:</string>
<string name="filedetails_download">Hent</string>
- <string name="filedetails_sync_file">Genopfrisk fil</string>
<string name="filedetails_renamed_in_upload_msg">Filen blev omdøbt til %1$s under upload</string>
<string name="list_layout">Listevisning</string>
- <string name="action_share_file">Del link</string>
- <string name="action_unshare_file">Ophæv deling</string>
+ <string name="action_share">Del</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nej</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Afbryd download</string>
- <string name="common_cancel_upload">Fortryd upload</string>
<string name="common_cancel">Annuller</string>
<string name="common_save_exit">Gem & Afslut</string>
<string name="common_error">Fejl</string>
<string name="unfavorite">Fjern markering som foretrukket</string>
<string name="common_rename">Omdøb</string>
<string name="common_remove">Fjern</string>
- <string name="confirmation_remove_alert">Er du sikker på at du vil fjerne %1$s ?</string>
+ <string name="confirmation_remove_file_alert">Er du sikker på at du vil fjerne %1$s ?</string>
<string name="confirmation_remove_folder_alert">Ønsker du virkelig at slette %1$s og dets indhold?</string>
<string name="confirmation_remove_local">Kun lokal</string>
- <string name="confirmation_remove_folder_local">Lokalt indhold kun</string>
- <string name="confirmation_remove_remote">Fjern fra server</string>
- <string name="confirmation_remove_remote_and_local">Både fjernt og lokalt</string>
+ <string name="confirmation_remove_folder_local">Kun lokal</string>
+ <string name="confirmation_remove_file_remote">Fra server</string>
+ <string name="confirmation_remove_remote_and_local">Fjernbeliggende og lokalt</string>
<string name="remove_success_msg">Vellykket fjernelse</string>
<string name="remove_fail_msg">Fjernelse kunne ikke fuldføres</string>
<string name="rename_dialog_title">Indtast et nyt navn</string>
<string name="conflict_title">Filkonflikt</string>
<string name="conflict_message">Hvilke filer ønsker du at beholde? Hvis du vælger begge versioner, så vil den lokale fil få et tal tilføjet til sit navn.</string>
<string name="conflict_keep_both">Behold begge</string>
- <string name="conflict_use_local_version">Benyt lokal version</string>
- <string name="conflict_use_server_version">Benyt serverversionen</string>
+ <string name="conflict_use_local_version">lokal version</string>
+ <string name="conflict_use_server_version">serverversion</string>
<string name="preview_image_description">Forhåndsvisning af billede</string>
<string name="preview_image_error_unknown_format">Dette billede kan ikke vises</string>
<string name="error__upload__local_file_not_copied">%1$s kunne ikke kopieres til %2$s lokale mappe</string>
<string name="downloader_download_file_not_found">Filen er ikke længere tilgængelig på serveren</string>
<string name="prefs_category_accounts">Konti</string>
<string name="prefs_add_account">Tilføj konto</string>
- <string name="auth_redirect_non_secure_connection_title">Sikker forbindelse videredirigeres til en usikker rute.</string>
+ <string name="auth_redirect_non_secure_connection_title">Sikker forbindelse videredirigeres gennem en usikker rute.</string>
<string name="actionbar_logger">Logge</string>
<string name="log_send_history_button">Send historik</string>
<string name="log_send_no_mail_app">Der blev ikke fundet apps, der kan sende logge. Installér mail-app\'en!</string>
<string name="move_file_invalid_overwrite">Filen findes allerede i destinationsmappen</string>
<string name="move_file_error">Der opstod en fejl under forsøg på at flytte denne mappe eller fil</string>
<string name="forbidden_permissions_move">til at flytte denne fil</string>
+ <string name="copy_file_not_found">Kunne ikke kopiere. Tjek venligst om filerne findes</string>
+ <string name="copy_file_invalid_into_descendent">Det er ikke muligt at kopiere en mappe til én af dens undermapper</string>
+ <string name="copy_file_invalid_overwrite">Filen findes allerede i destinationsmappen</string>
+ <string name="copy_file_error">Der opstod en fejl under forsøg på at kopiere denne fil eller mappe</string>
+ <string name="forbidden_permissions_copy">til at kopiere denne fil</string>
<string name="prefs_category_instant_uploading">Øjeblikkelige uploads</string>
<string name="prefs_category_security">Sikkerhed</string>
<string name="prefs_instant_video_upload_path_title">Sti til videoupload</string>
- <string name="download_folder_failed_content">Download af %1$s mappe kunne ikke fuldføres</string>
<string name="shared_subject_header">delt</string>
<string name="with_you_subject_header">med dig</string>
- <string name="subject_token">%1$s delte \"%2$s\" med dig</string>
- <string name="saml_subject_token">\"%1$s\" er blevet delt med dig</string>
+ <string name="subject_user_shared_with_you">%1$s delte \"%2$s\" med dig</string>
+ <string name="subject_shared_with_you">\"%1$s\" er blevet delt med dig</string>
<string name="auth_refresh_button">Genopfrisk forbindelsen</string>
<string name="auth_host_address">Serveradresse</string>
<string name="common_error_out_memory">Ikke tilstrækkelig hukommelse</string>
<string name="file_list__footer__files">%1$d filer</string>
<string name="file_list__footer__files_and_folder">%1$d filer, 1 mape</string>
<string name="file_list__footer__files_and_folders">%1$d filer, %2$d mapper</string>
+ <string name="share_dialog_title">Deling</string>
+ <string name="share_via_link_section_title">Del link</string>
+ <string name="share_via_link_expiration_date_label">Vælg udløbsdato</string>
+ <string name="share_via_link_password_label">Beskyt med adgangskode</string>
+ <string name="share_search">Søg</string>
</resources>
<string name="filedetails_created">Erstellt am:</string>
<string name="filedetails_modified">Verändert am:</string>
<string name="filedetails_download">Herunterladen</string>
- <string name="filedetails_sync_file">Datei neu laden</string>
- <string name="action_share_file">Link teilen</string>
- <string name="action_unshare_file">Link nicht mehr teilen</string>
+ <string name="action_share">Freigeben</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nein</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Herunterladen abbrechen</string>
- <string name="common_cancel_upload">Hochladen abbrechen</string>
<string name="common_cancel">Abbrechen</string>
<string name="common_save_exit">Speichern & Schließen</string>
<string name="common_error">Fehler</string>
<string name="empty"></string>
<string name="prefs_category_accounts">Konten</string>
<string name="auth_host_address">Adresse des Servers</string>
+ <string name="share_via_link_section_title">Link teilen</string>
</resources>
<string name="common_remove">Löschen</string>
<string name="confirmation_remove_local">Nur lokal</string>
<string name="confirmation_remove_folder_local">Nur lokale Inhalte</string>
- <string name="confirmation_remove_remote">Vom Server entfernen</string>
+ <string name="confirmation_remove_file_remote">Vom Server entfernen</string>
<string name="confirmation_remove_remote_and_local">Lokal und auf dem Server</string>
<string name="remove_success_msg">Erfolgreich gelöscht</string>
<string name="remove_fail_msg">Der Löschvorgang konnte nicht beendet werden</string>
<string name="drawer_item_settings">Einstellungen</string>
<string name="drawer_item_logs">Protokolle</string>
<string name="drawer_close">Schließen</string>
+ <string name="drawer_open">Öffnen</string>
<string name="prefs_category_general">Allgemein</string>
<string name="prefs_category_more">Mehr</string>
<string name="prefs_accounts">Konten</string>
<string name="file_list_seconds_ago">Gerade eben</string>
<string name="file_list_empty">Alles leer. Laden Sie etwas hoch!</string>
<string name="file_list_loading">Lade…</string>
+ <string name="file_list_no_app_for_file_type">Es wurde keine App für die Datei gefunden!</string>
<string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
<string name="filedetails_select_file">Klicken Sie auf eine Datei für weitere Informationen.</string>
<string name="filedetails_size">Größe:</string>
<string name="filedetails_created">Erstellt:</string>
<string name="filedetails_modified">Geändert:</string>
<string name="filedetails_download">Herunterladen</string>
- <string name="filedetails_sync_file">Datei aktualisieren</string>
+ <string name="filedetails_sync_file">syncronisieren</string>
<string name="filedetails_renamed_in_upload_msg">Datei wurde wärend des Uploads zu %1$s umbenannt</string>
<string name="list_layout">Listen-Layout</string>
- <string name="action_share_file">Link teilen</string>
- <string name="action_unshare_file">Link nicht mehr teilen</string>
+ <string name="action_share">Share</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nein</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Download abbrechen</string>
- <string name="common_cancel_upload">Upload abbrechen</string>
+ <string name="common_cancel_sync">Synchronisation beenden</string>
<string name="common_cancel">Abbrechen</string>
<string name="common_save_exit">Speichern & Schließen</string>
<string name="common_error">Fehler</string>
<string name="unfavorite">Nicht mehr favorisieren</string>
<string name="common_rename">Umbenennen</string>
<string name="common_remove">Löschen</string>
- <string name="confirmation_remove_alert">Möchten Sie %1$s wirklich löschen?</string>
+ <string name="confirmation_remove_file_alert">Möchten Sie %1$s wirklich löschen?</string>
<string name="confirmation_remove_folder_alert">Möchten Sie wirklich %1$s und dessen Inhalte entfernen?</string>
<string name="confirmation_remove_local">Nur lokal</string>
- <string name="confirmation_remove_folder_local">Nur lokale Inhalte</string>
- <string name="confirmation_remove_remote">Vom Server entfernen</string>
- <string name="confirmation_remove_remote_and_local">Lokal und auf dem Server</string>
+ <string name="confirmation_remove_folder_local">Nur lokal</string>
+ <string name="confirmation_remove_remote">Vom Server</string>
<string name="remove_success_msg">Erfolgreich gelöscht</string>
<string name="remove_fail_msg">Der Löschvorgang konnte nicht beendet werden</string>
<string name="rename_dialog_title">Geben Sie einen neuen Namen ein</string>
<string name="conflict_title">Dateikonflikt</string>
<string name="conflict_message">Welche Datei möchtest du behalten? Wenn du beide Versionen auswählst, wird der lokalen Datei eine Zahl am Ende Ihres Dateiname angehangen.</string>
<string name="conflict_keep_both">Beide behalten</string>
- <string name="conflict_use_local_version">Benutze lokale Version</string>
- <string name="conflict_use_server_version">Benutze Version auf dem Server</string>
+ <string name="conflict_use_local_version">lokale Version</string>
+ <string name="conflict_use_server_version">Server Version</string>
<string name="preview_image_description">Bildvorschau</string>
<string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
<string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
<string name="move_file_invalid_overwrite">Die Datei ist bereits im Zielordner vorhanden</string>
<string name="move_file_error">Es ist ein Fehler beim Verschieben dieser Datei oder dieses Ordners aufgetreten.</string>
<string name="forbidden_permissions_move">um diese Datei zu verschieben</string>
+ <string name="copy_file_invalid_overwrite">Die Datei ist bereits im Zielordner vorhanden</string>
+ <string name="forbidden_permissions_copy">um diese Datei zu kopieren</string>
<string name="prefs_category_instant_uploading">Sofortiges Hochladen</string>
<string name="prefs_category_security">Sicherheit</string>
<string name="prefs_instant_video_upload_path_title">Verzeichnis zum Hochladen der Videos</string>
- <string name="download_folder_failed_content">Herunterladen des %1$s - Ordners konnte nicht abgeschlossen werden</string>
<string name="shared_subject_header">geteilt</string>
<string name="with_you_subject_header">Mit Ihnen</string>
- <string name="subject_token">%1$s hat \"%2$s\" mit Ihnen geteilt</string>
- <string name="saml_subject_token">\"%1$s\" wurde mit dir geteilt</string>
+ <string name="subject_user_shared_with_you">%1$s hat \"%2$s\" mit Ihnen geteilt</string>
+ <string name="subject_shared_with_you">\"%1$s\" wurde mit dir geteilt</string>
<string name="auth_refresh_button">Verbindung aktualisieren</string>
<string name="auth_host_address">Serveradresse</string>
<string name="common_error_out_memory">Nicht genügend Speicher</string>
<string name="file_list__footer__files">%1$d Dateien</string>
<string name="file_list__footer__files_and_folder">%1$d Dateien, 1 Ordner</string>
<string name="file_list__footer__files_and_folders">%1$d Dateien, %2$d Ordner</string>
+ <string name="share_dialog_title">Teilen</string>
+ <string name="share_with_user_section_title">Mit Benutzern und Gruppen teilen</string>
+ <string name="share_add_user_or_group">Benutzer oder Gruppe hinzufügen</string>
+ <string name="share_via_link_section_title">Link teilen</string>
+ <string name="share_via_link_expiration_date_label">Ein Ablaufdatum setzen</string>
+ <string name="share_via_link_password_label">Passwortschutz</string>
+ <string name="share_search">Suche</string>
+ <string name="search_users_and_groups_hint">Nach Benutzern und Gruppen suchen</string>
</resources>
<string name="drawer_item_settings">Einstellungen</string>
<string name="drawer_item_logs">Protokolle</string>
<string name="drawer_close">Schließen</string>
+ <string name="drawer_open">Öffnen</string>
<string name="prefs_category_general">Allgemein</string>
<string name="prefs_category_more">Mehr</string>
<string name="prefs_accounts">Konten</string>
<string name="file_list_seconds_ago">Gerade eben</string>
<string name="file_list_empty">Alles leer. Lade etwas hoch!</string>
<string name="file_list_loading">Lade…</string>
+ <string name="file_list_no_app_for_file_type">Es wurden keine Apps für den Dateityp gefunden!</string>
<string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
<string name="filedetails_select_file">Klicken Sie auf eine Datei für weitere Informationen.</string>
<string name="filedetails_size">Größe:</string>
<string name="filedetails_created">Erstellt:</string>
<string name="filedetails_modified">Geändert:</string>
<string name="filedetails_download">Herunterladen</string>
- <string name="filedetails_sync_file">Datei aktualisieren</string>
<string name="filedetails_renamed_in_upload_msg">Datei wurde wärend des Uploads zu %1$s umbenannt</string>
<string name="list_layout">Listen-Layout</string>
- <string name="action_share_file">Link teilen</string>
- <string name="action_unshare_file">Link nicht mehr freigeben</string>
+ <string name="action_share">Teilen</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nein</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Download abbrechen</string>
- <string name="common_cancel_upload">Upload abbrechen</string>
<string name="common_cancel">Abbrechen</string>
<string name="common_save_exit">Speichern & schließen</string>
<string name="common_error">Fehler</string>
<string name="unfavorite">Favorit entfernen</string>
<string name="common_rename">Umbenennen</string>
<string name="common_remove">Löschen</string>
- <string name="confirmation_remove_alert">Möchtest Du %1$s wirklich löschen?</string>
+ <string name="confirmation_remove_file_alert">Möchtest Du %1$s wirklich löschen?</string>
<string name="confirmation_remove_folder_alert">Möchtest Du wirklich %1$s und dessen Inhalte entfernen?</string>
<string name="confirmation_remove_local">Nur lokal</string>
- <string name="confirmation_remove_folder_local">Nur lokale Inhalte</string>
- <string name="confirmation_remove_remote">Vom Server entfernen</string>
- <string name="confirmation_remove_remote_and_local">Lokal und auf dem Server</string>
+ <string name="confirmation_remove_folder_local">Nur lokal</string>
+ <string name="confirmation_remove_remote">Vom Server</string>
+ <string name="confirmation_remove_remote_and_local">Remote & lokal</string>
<string name="remove_success_msg">Erfolgreich gelöscht</string>
<string name="remove_fail_msg">Der Löschvorgang konnte nicht beendet werden</string>
<string name="rename_dialog_title">Gib einen neuen Namen ein</string>
<string name="conflict_title">Dateikonfilikt</string>
<string name="conflict_message">Welche Datei möchtest du behalten? Wenn du beide Versionen auswählst, wird der lokalen Datei eine Zahl am Ende Ihres Dateiname angehangen.</string>
<string name="conflict_keep_both">Beide behalten</string>
- <string name="conflict_use_local_version">Benutze lokale Version</string>
- <string name="conflict_use_server_version">Benutze Version auf dem Server</string>
+ <string name="conflict_use_local_version">Lokale Version</string>
+ <string name="conflict_use_server_version">Serverversion</string>
<string name="preview_image_description">Bildvorschau</string>
<string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
<string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
<string name="downloader_download_file_not_found">Diese Datei steht auf dem Server nicht mehr zur Verfügung</string>
<string name="prefs_category_accounts">Konten</string>
<string name="prefs_add_account">Konto hinzufügen</string>
- <string name="auth_redirect_non_secure_connection_title">Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet.</string>
+ <string name="auth_redirect_non_secure_connection_title">Die gesicherte Verbindung wird durch eine ungesicherte Route geleitet.</string>
<string name="actionbar_logger">Protokolle</string>
<string name="log_send_history_button">Verlauf senden</string>
<string name="log_send_no_mail_app">Keine App zum Versenden der Meldungen gefunden. Bitte installiere die Mail-App!</string>
<string name="move_file_invalid_overwrite">Die Datei ist bereits im Zielordner vorhanden</string>
<string name="move_file_error">Es ist ein Fehler beim Verschieben der Datei oder des Ordners aufgetreten.</string>
<string name="forbidden_permissions_move">um diese Datei zu verschieben</string>
+ <string name="copy_file_not_found">Kopieren nicht möglich. Prüfe, dass die Datei existiert</string>
+ <string name="copy_file_invalid_into_descendent">Es ist nicht möglich, einen Ordner in einen seiner Unterordner zu kopieren</string>
+ <string name="copy_file_invalid_overwrite">Die Datei existiert bereits im Zielverzeichnis</string>
+ <string name="copy_file_error">Es ist ein Fehler beim Kopieren der Datei oder des Ordners aufgetreten.</string>
+ <string name="forbidden_permissions_copy">diese Datei zu kopieren</string>
<string name="prefs_category_instant_uploading">Sofortiges Hochladen</string>
<string name="prefs_category_security">Sicherheit</string>
<string name="prefs_instant_video_upload_path_title">Verzeichnis zum Hochladen der Videos</string>
- <string name="download_folder_failed_content">Herunterladen des %1$s - Ordners konnte nicht abgeschlossen werden</string>
<string name="shared_subject_header">geteilt</string>
<string name="with_you_subject_header">Mit Dir</string>
- <string name="subject_token">%1$s hat \"%2$s\" mit Dir geteilt</string>
- <string name="saml_subject_token">\"%1$s\" wurde mit dir geteilt</string>
+ <string name="subject_user_shared_with_you">%1$s hat \"%2$s\" mit Dir geteilt</string>
+ <string name="subject_shared_with_you">\"%1$s\" wurde mit dir geteilt</string>
<string name="auth_refresh_button">Verbindung aktualisieren</string>
<string name="auth_host_address">Serveradresse</string>
<string name="common_error_out_memory">Nicht genügend Speicher</string>
<string name="file_list__footer__files">%1$d Dateien</string>
<string name="file_list__footer__files_and_folder">%1$d Dateien, 1 Ordner</string>
<string name="file_list__footer__files_and_folders">%1$d Dateien, %2$d Ordner</string>
+ <string name="share_dialog_title">Teilen</string>
+ <string name="share_no_users">Es wurden noch keine Dateien mit Benutzern geteilt</string>
+ <string name="share_add_user_or_group">Benutzer oder Gruppe hinzufügen</string>
+ <string name="share_via_link_section_title">Link teilen</string>
+ <string name="share_via_link_expiration_date_label">Setze ein Ablaufdatum</string>
+ <string name="share_via_link_password_label">Passwortschutz</string>
+ <string name="share_search">Suche</string>
</resources>
<string name="drawer_item_settings">Ρυθμίσεις</string>
<string name="drawer_item_logs">Αρχεία καταγραφών</string>
<string name="drawer_close">Κλείσιμο</string>
+ <string name="drawer_open">Άνοιγμα</string>
<string name="prefs_category_general">Γενικά</string>
<string name="prefs_category_more">Περισσότερα</string>
<string name="prefs_accounts">Λογαριασμοί</string>
<string name="file_list_seconds_ago">δευτερόλεπτα πριν</string>
<string name="file_list_empty">Δεν υπάρχει τίποτα εδώ. Μεταφορτώστε κάτι!</string>
<string name="file_list_loading">Φόρτωση...</string>
+ <string name="file_list_no_app_for_file_type">Δεν βρέθηκε εφαρμογή για αυτόν τον τύπο αρχείου</string>
<string name="local_file_list_empty">Δεν υπάρχουν αρχεία σε αυτό τον φάκελο.</string>
<string name="filedetails_select_file">Αγγίξτε κάποιο αρχείο για να προβάλετε περισσότερες πληροφορίες.</string>
<string name="filedetails_size">Μέγεθος:</string>
<string name="filedetails_created">Δημιουργήθηκε:</string>
<string name="filedetails_modified">Τροποποιήθηκε:</string>
<string name="filedetails_download">Λήψη</string>
- <string name="filedetails_sync_file">Î\91νανÎÏ\89Ï\83η αÏ\81Ï\87είοÏ\85</string>
+ <string name="filedetails_sync_file">ΣÏ\85γÏ\87Ï\81ονιÏ\83μÏ\8cÏ\82</string>
<string name="filedetails_renamed_in_upload_msg">Το αρχείο μετονομάστηκε σε %1$s κατά τη μεταφόρτωση</string>
<string name="list_layout">Διάταξη Λίστας</string>
- <string name="action_share_file">Διαμοιρασμός συνδέσμου</string>
- <string name="action_unshare_file">Ακύρωση διαμοιρασμού συνδέσμου</string>
+ <string name="action_share">Διαμοιράστε</string>
<string name="common_yes">Ναι</string>
<string name="common_no">Όχι</string>
<string name="common_ok">ΟΚ</string>
- <string name="common_cancel_download">Ακύρωση λήψης</string>
- <string name="common_cancel_upload">Ακύρωση μεταφόρτωσης</string>
+ <string name="common_cancel_sync">Ακύρωση συγχρονισμού</string>
<string name="common_cancel">Άκυρο</string>
<string name="common_save_exit">Αποθήκευση & Έξοδος</string>
<string name="common_error">Σφάλμα</string>
<string name="unfavorite">Κατάργηση από τα αγαπημένα</string>
<string name="common_rename">Μετονομασία</string>
<string name="common_remove">Αφαίρεση</string>
- <string name="confirmation_remove_alert">Θέλετε στ\' αλήθεια να αφαιρέσετε το %1$s;</string>
+ <string name="confirmation_remove_file_alert">Θέλετε στ\' αλήθεια να αφαιρέσετε το %1$s;</string>
<string name="confirmation_remove_folder_alert">Θέλετε στ\' αλήθεια να διαγράψετε το %1$s και τα περιεχόμενά του;</string>
<string name="confirmation_remove_local">Μόνο τοπικά</string>
- <string name="confirmation_remove_folder_local">Μόνο τοπικό περιεχόμενο</string>
- <string name="confirmation_remove_remote">Αφαίρεση από το διακομιστή</string>
- <string name="confirmation_remove_remote_and_local">Απομακρυσμένα και τοπικά</string>
+ <string name="confirmation_remove_folder_local">Μόνο τοπικά</string>
+ <string name="confirmation_remove_file_remote">Από το διακομιστή</string>
+ <string name="confirmation_remove_remote_and_local">Απομακρυσμένα & τοπικά</string>
<string name="remove_success_msg">Αφαίρεση επιτυχής</string>
<string name="remove_fail_msg">Η αφαίρεση απέτυχε</string>
<string name="rename_dialog_title">Εισάγετε νέο όνομα</string>
<string name="ssl_validator_label_validity_to">Μέχρι:</string>
<string name="ssl_validator_label_signature">Υπογραφή:</string>
<string name="ssl_validator_label_signature_algorithm">Αλγόριθμος:</string>
+ <string name="digest_algorithm_not_available">Ο αλγόριθμος digest δεν είναι διαθέσιμος στο τηλέφωνό σας.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Ψηφιακό αποτύπωμα:</string>
+ <string name="certificate_load_problem">Πρόβλημα φόρτωσης του πιστοποιητικού.</string>
<string name="ssl_validator_null_cert">Δεν μπορεί να εμφανιστεί το πιστοποιητικό.</string>
<string name="ssl_validator_no_info_about_error">- Καμμία πληροφορία σχετικά με το σφάλμα</string>
<string name="placeholder_sentence">Αυτό είναι ένα σημείο κράτησης θέσης</string>
<string name="conflict_title">Διένεξη αρχείων</string>
<string name="conflict_message">Ποια αρχεία θέλετε να κρατήσετε; Αν επιλέξετε και τις δύο εκδοχές, στο τοπικό αρχείο θα προστεθεί ένας αριθμός στο όνομά του.</string>
<string name="conflict_keep_both">Διατήρηση και των δύο</string>
- <string name="conflict_use_local_version">Χρήση τοπικής εκδοχής</string>
- <string name="conflict_use_server_version">ΧÏ\81ήÏ\83η εκδοÏ\87ήÏ\82 διακομιστή</string>
+ <string name="conflict_use_local_version">τοπική έκδοση</string>
+ <string name="conflict_use_server_version">ÎκδοÏ\83η διακομιστή</string>
<string name="preview_image_description">Προεπισκόπηση εικόνας</string>
<string name="preview_image_error_unknown_format">Αυτή η εικόνα δεν μπορεί να προβληθεί</string>
<string name="error__upload__local_file_not_copied">Το %1$s δεν μπόρεσε να αντιγραφεί στον τοπικό φάκελο %2$s</string>
<string name="share_link_empty_password">Πρέπει να εισάγετε ένα κωδικό πρόσβασης.</string>
<string name="activity_chooser_send_file_title">Αποστολή</string>
<string name="copy_link">Αντιγραφή συνδέσμου</string>
- <string name="clipboard_text_copied">Î\91νÏ\84ιγÏ\81αÏ\86θηκε στο πρόχειρο</string>
+ <string name="clipboard_text_copied">Î\91νÏ\84ιγÏ\81άÏ\86ηκε στο πρόχειρο</string>
<string name="error_cant_bind_to_operations_service">Κρίσιμο σφάλμα: αδύνατη η εκτέλεση λειτουργειών</string>
<string name="network_error_socket_exception">Ένα σφάλμα προέκυψε κατά τη σύνδεση με το διακομιστή.</string>
<string name="network_error_socket_timeout_exception">Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής</string>
<string name="downloader_download_file_not_found">Αυτό το αρχείο δεν είναι πια διαθέσιμο στο διακομιστή</string>
<string name="prefs_category_accounts">Λογαριασμοί</string>
<string name="prefs_add_account">Προσθήκη λογαριασμού</string>
- <string name="auth_redirect_non_secure_connection_title">Ασφαλής σύνδεση ανακατευθύνεται σε μια μη ασφαλή διαδρομή.</string>
+ <string name="auth_redirect_non_secure_connection_title">Ασφαλής σύνδεση ανακατευθύνεται μέσω μιας μη ασφαλούς διαδρομής.</string>
<string name="actionbar_logger">Αρχεία καταγραφών</string>
<string name="log_send_history_button">Αποστολή Ιστορικού</string>
<string name="log_send_no_mail_app">Δεν εντοπίστηκε εφαρμογή αποστολής αναφορών συστήματος. Εγκαταστήστε την εφαρμογή Ηλ. Ταχυδρομείου!!</string>
<string name="move_file_invalid_overwrite">Το αρχείο υπάρχει ήδη στο φάκελο προορισμού</string>
<string name="move_file_error">Ένα σφάλμα προέκυψε κατά την προσπάθεια μετακίνησης αυτού του αρχείου ή φακέλου</string>
<string name="forbidden_permissions_move">για μετακίνηση αυτού του αρχείου</string>
+ <string name="copy_file_not_found">Αδύνατη η αντιγραφή. Παρακαλώ ελέγξτε αν το αρχείο υπάρχει</string>
+ <string name="copy_file_invalid_into_descendent">Δεν είναι δυνατό να αντιγραφεί ο φάκελος σε παράγωγό του φάκελο</string>
+ <string name="copy_file_invalid_overwrite">Το αρχείο υπάρχει ήδη στο φάκελο προορισμού</string>
+ <string name="copy_file_error">Παρουσιάστηκε σφάλμα κατά την προσπάθεια αντιγραφής αυτού του αρχείου ή φακέλου</string>
+ <string name="forbidden_permissions_copy">για αντιγραφή αυτού του αρχείου</string>
<string name="prefs_category_instant_uploading">Στιγμιαίες Μεταφορτώσεις</string>
<string name="prefs_category_security">Ασφάλεια</string>
<string name="prefs_instant_video_upload_path_title">Διαδρομή Μεταφόρτωσης Βίντεο</string>
- <string name="download_folder_failed_content">Η λήψη του φακέλου %1$s δεν ολοκληρώθηκε με επιτυχία.</string>
+ <string name="sync_folder_failed_content">Ο συγχρονισμός του φακέλου %1$s δεν μπόρεσε να ολοκληρωθεί</string>
<string name="shared_subject_header">διαμοιρασμένα</string>
<string name="with_you_subject_header">με εσάς</string>
- <string name="subject_token">Ο %1$s διαμοιράστηκε το \"%2$s\" με εσάς</string>
- <string name="saml_subject_token">\"%1$s\" μοιράστηκε μαζί σας</string>
+ <string name="subject_user_shared_with_you">Ο %1$s διαμοιράστηκε το \"%2$s\" με εσάς</string>
+ <string name="subject_shared_with_you">\"%1$s\" μοιράστηκε μαζί σας</string>
<string name="auth_refresh_button">Ανανέωση σύνδεσης</string>
<string name="auth_host_address">Διεύθυνση διακομιστή</string>
<string name="common_error_out_memory">Δεν υπάρχει αρκετή μνήμη</string>
<string name="file_list__footer__files">%1$d αρχεία</string>
<string name="file_list__footer__files_and_folder">%1$d αρχεία, 1 φάκελος</string>
<string name="file_list__footer__files_and_folders">%1$d αρχεία, %2$d φάκελοι</string>
+ <string name="share_dialog_title">Διαμοιρασμός</string>
+ <string name="share_no_users">Δεν έχουν διαμοιραστεί ακόμα δεδομένα με τους χρήστες</string>
+ <string name="share_add_user_or_group">Προσθήκη χρήστη ή ομάδας</string>
+ <string name="share_via_link_section_title">Διαμοιρασμός συνδέσμου</string>
+ <string name="share_via_link_expiration_date_label">Ορισμός ημ. λήξης</string>
+ <string name="share_via_link_password_label">Προστασία συνθηματικού</string>
+ <string name="share_search">Αναζήτηση</string>
+ <string name="search_users_and_groups_hint">Αναζήτηση χρηστών και ομάδων</string>
+ <string name="share_group_clarification">%1$s (ομάδα)</string>
+ <string name="share_sharee_unavailable">Δεν επιτρέπεται ο διαμοιρασμός μεταξύ χρηστών μέσω εφαρμογής, σε αυτή την έκδοση.
+\nΕπικοινωνήστε με το διαχειριστή του συστήματος</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Open</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">More</string>
<string name="prefs_accounts">Accounts</string>
<string name="filedetails_created">Created:</string>
<string name="filedetails_modified">Modified:</string>
<string name="filedetails_download">Download</string>
- <string name="filedetails_sync_file">Refresh file</string>
<string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
- <string name="action_share_file">Share link</string>
- <string name="action_unshare_file">Unshare link</string>
+ <string name="action_share">Share</string>
<string name="common_yes">Yes</string>
<string name="common_no">No</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Cancel download</string>
- <string name="common_cancel_upload">Cancel upload</string>
<string name="common_cancel">Cancel</string>
<string name="common_save_exit">Save & Exit</string>
<string name="common_error">Error</string>
<string name="unfavorite">Unfavourite</string>
<string name="common_rename">Rename</string>
<string name="common_remove">Remove</string>
- <string name="confirmation_remove_alert">Do you really want to remove %1$s?</string>
+ <string name="confirmation_remove_file_alert">Do you really want to remove %1$s?</string>
<string name="confirmation_remove_folder_alert">Do you really want to remove %1$s and its contents?</string>
<string name="confirmation_remove_local">Local only</string>
- <string name="confirmation_remove_folder_local">Local contents only</string>
- <string name="confirmation_remove_remote">Remove from server</string>
- <string name="confirmation_remove_remote_and_local">Remote and local</string>
+ <string name="confirmation_remove_folder_local">Local only</string>
<string name="remove_success_msg">Removal succeeded</string>
<string name="remove_fail_msg">Removal failed</string>
<string name="rename_dialog_title">Enter a new name</string>
<string name="downloader_download_file_not_found">The file is no longer available on the server</string>
<string name="prefs_category_accounts">Accounts</string>
<string name="prefs_add_account">Add account</string>
- <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected to an unsecured route.</string>
+ <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
<string name="actionbar_logger">Logs</string>
<string name="log_send_history_button">Send History</string>
<string name="log_send_no_mail_app">No app for sending logs found. Install mail app!</string>
<string name="move_file_invalid_overwrite">The file exists already in the destination folder</string>
<string name="move_file_error">An error occurred whilst trying to move this file or folder</string>
<string name="forbidden_permissions_move">to move this file</string>
+ <string name="copy_file_invalid_overwrite">The file exists already in the destination folder</string>
<string name="prefs_category_instant_uploading">Instant Uploads</string>
<string name="prefs_category_security">Security</string>
<string name="prefs_instant_video_upload_path_title">Upload Video Path</string>
- <string name="download_folder_failed_content">Download of %1$s folder could not be completed</string>
+ <string name="subject_user_shared_with_you">%1$s shared \"%2$s\" with you</string>
<string name="auth_refresh_button">Refresh connection</string>
<string name="auth_host_address">Server address</string>
<string name="common_error_out_memory">Not enough memory</string>
+ <string name="share_dialog_title">Sharing</string>
+ <string name="share_via_link_section_title">Share link</string>
+ <string name="share_via_link_expiration_date_label">Set expiration date</string>
+ <string name="share_via_link_password_label">Password protect</string>
+ <string name="share_search">Search</string>
</resources>
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <!--TODO re-enable when server-side folder size calculation is available
+ <item>Biggest - Smallest</item>-->
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<string name="drawer_item_accounts">Accounts</string>-->
+ <!--TODO re-enable when "On Device" is available
+ <string name="drawer_item_on_device">On device</string>-->
+ <string name="empty"></string>
+</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Malfermi</string>
<string name="prefs_category_general">Ĝeneralo</string>
<string name="prefs_category_more">Pli</string>
<string name="prefs_accounts">Kontoj</string>
<string name="filedetails_modified">Modifita je:</string>
<string name="filedetails_download">Elŝuti</string>
<string name="filedetails_renamed_in_upload_msg">La dosiero alinomiĝis al %1$s dum alŝuto</string>
- <string name="action_share_file">Konhavigi ligilon</string>
- <string name="action_unshare_file">Malkunhavigi ligilon</string>
+ <string name="action_share">Kunhavigi</string>
<string name="common_yes">Jes</string>
<string name="common_no">Ne</string>
<string name="common_ok">Akcepti</string>
- <string name="common_cancel_download">Nuligi elŝuton</string>
- <string name="common_cancel_upload">Nuligi alŝuton</string>
<string name="common_cancel">Nuligi</string>
<string name="common_save_exit">Konservi kaj forlasi</string>
<string name="common_error">Eraro</string>
<string name="unfavorite">Nefavoratigi</string>
<string name="common_rename">Alinomigi</string>
<string name="common_remove">Forigi</string>
- <string name="confirmation_remove_alert">Ĉu vi vere volas forigi %1$s?</string>
+ <string name="confirmation_remove_file_alert">Ĉu vi vere volas forigi %1$s?</string>
<string name="confirmation_remove_folder_alert">Ĉu vi vere volas forigi %1$s kaj ĝia enhavo?</string>
<string name="confirmation_remove_local">Nur loka</string>
- <string name="confirmation_remove_folder_local">Nur lokaj enhavoj</string>
- <string name="confirmation_remove_remote">Forigi el la servilo</string>
- <string name="confirmation_remove_remote_and_local">Kaj malloka kaj loka</string>
+ <string name="confirmation_remove_folder_local">Nur loka</string>
<string name="remove_success_msg">Forigo sukcesis</string>
<string name="remove_fail_msg">Forigo ne eblis plenumiĝi</string>
<string name="rename_dialog_title">Enigu novan nomon</string>
<string name="actionbar_move">Movi</string>
<string name="folder_picker_choose_button_text">Elekti</string>
<string name="move_file_invalid_overwrite">La dosiero jam ekzistas en la cela dosierujo</string>
+ <string name="copy_file_invalid_overwrite">La dosiero jam ekzistas en la cela dosierujo</string>
<string name="prefs_category_security">Sekuro</string>
<string name="auth_host_address">Servila adreso</string>
+ <string name="file_list__footer__file">1 dosiero</string>
+ <string name="file_list__footer__files">%1$d dosieroj</string>
+ <string name="share_dialog_title">Kunhavigo</string>
+ <string name="share_via_link_section_title">Kunhavigi ligilon</string>
+ <string name="share_via_link_expiration_date_label">Agordi limdaton</string>
+ <string name="share_via_link_password_label">Protekti per pasvorto</string>
+ <string name="share_search">Serĉi</string>
</resources>
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Todos los archivos</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Abrir</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Más</string>
<string name="prefs_accounts">Cuentas</string>
<string name="filedetails_created">Creado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Descargar</string>
- <string name="filedetails_sync_file">Actualizar archivo</string>
<string name="filedetails_renamed_in_upload_msg">El archivo fue renombrado como %1$s durante la subida</string>
- <string name="action_share_file">Compartir vínculo</string>
- <string name="action_unshare_file">Dejar de compartir vínculo</string>
+ <string name="action_share">Compartir</string>
<string name="common_yes">Sí</string>
<string name="common_no">No</string>
<string name="common_ok">Aceptar</string>
- <string name="common_cancel_download">Cancelar descarga</string>
- <string name="common_cancel_upload">Cancelar subida</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Guardar y salir</string>
<string name="common_error">Error</string>
<string name="favorite">Favorito</string>
<string name="common_rename">Renombrar</string>
<string name="common_remove">Borrar</string>
- <string name="confirmation_remove_alert">¿Realmente quieres eliminar %1$s?</string>
+ <string name="confirmation_remove_file_alert">¿Realmente quieres eliminar %1$s?</string>
<string name="confirmation_remove_folder_alert">¿Realmente deseas eliminar %1$s y todo su contenido?</string>
<string name="confirmation_remove_local">Sólo local</string>
- <string name="confirmation_remove_folder_local">Solo archivos locales</string>
- <string name="confirmation_remove_remote">Borrar del servidor</string>
- <string name="confirmation_remove_remote_and_local">Ambos: remoto y local</string>
+ <string name="confirmation_remove_folder_local">Sólo local</string>
<string name="remove_success_msg">Borrado correctamente</string>
<string name="remove_fail_msg">El borrado no pudo ser completado</string>
<string name="rename_dialog_title">Ingrese un nombre</string>
<string name="downloader_download_file_not_found">El archivo no esta mas disponible en este Servidor</string>
<string name="prefs_category_accounts">Cuentas</string>
<string name="prefs_add_account">Añadir cuenta</string>
- <string name="auth_redirect_non_secure_connection_title">Conexión segura redireccionada a una ruta insegura.</string>
<string name="actionbar_logger">Registro</string>
<string name="log_send_history_button">Enviar Historial</string>
<string name="log_send_no_mail_app">Aplicación para enviar registros no encontrada. Instale una aplicación de correo!</string>
<string name="move_file_invalid_overwrite">El archivo ya existe en la carpeta destino</string>
<string name="move_file_error">Un error ocurrió intentando mover el archivo o carpeta</string>
<string name="forbidden_permissions_move">para mover este archivo</string>
+ <string name="copy_file_invalid_overwrite">El archivo ya existe en la carpeta destino</string>
<string name="prefs_category_instant_uploading">Subida Instantánea </string>
<string name="prefs_category_security">Seguridad</string>
<string name="prefs_instant_video_upload_path_title">Dirección de subida del video</string>
- <string name="download_folder_failed_content">La descarga de la carpeta %1$s no pudo ser completada</string>
<string name="auth_host_address">Dirección del servidor</string>
+ <string name="share_dialog_title">Compartiendo</string>
+ <string name="share_via_link_section_title">Compartir vínculo</string>
+ <string name="share_via_link_expiration_date_label">Asignar fecha de vencimiento</string>
+ <string name="share_via_link_password_label">Proteger con contraseña </string>
+ <string name="share_search">Buscar</string>
</resources>
<string name="filedetails_created">Creado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Descargar</string>
- <string name="filedetails_sync_file">refrescar archivo</string>
<string name="filedetails_renamed_in_upload_msg">El archivo fue renombrado a %1$s durante la subida</string>
+ <string name="action_share">Compartir</string>
<string name="common_yes">Si</string>
<string name="common_no">No</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">cancelar bajada</string>
- <string name="common_cancel_upload">cancelar subida</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Guardar&Salir</string>
<string name="common_error">Error</string>
<string name="auth_unauthorized">usuario o clave incorrecta</string>
<string name="common_rename">Renombrar</string>
<string name="common_remove">Remover</string>
- <string name="confirmation_remove_alert">¿Realmente desea eliminar %1$s?</string>
+ <string name="confirmation_remove_file_alert">¿Realmente desea eliminar %1$s?</string>
<string name="confirmation_remove_folder_alert">¿Realmente desea eliminar el archivo %1$s y su contenido?</string>
<string name="confirmation_remove_local">Solo local</string>
- <string name="confirmation_remove_folder_local">solo contenidos locales </string>
- <string name="confirmation_remove_remote">Eliminar desde el servidor</string>
- <string name="confirmation_remove_remote_and_local">Remoto y local</string>
+ <string name="confirmation_remove_folder_local">Solo local</string>
<string name="remove_success_msg">Removido correctamente</string>
<string name="remove_fail_msg">Fallo al remover</string>
<string name="rename_dialog_title">ingresar un nuevo nombre</string>
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <!--TODO re-enable when server-side folder size calculation is available
+ <item>Biggest - Smallest</item>-->
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<string name="drawer_item_accounts">Accounts</string>-->
+ <!--TODO re-enable when "On Device" is available
+ <string name="drawer_item_on_device">On device</string>-->
+ <string name="empty"></string>
+</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_settings">Ajustes</string>
+ <string name="drawer_open">Abrir</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Más</string>
<string name="prefs_accounts">Cuentas</string>
<string name="filedetails_created">Creado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Descargar</string>
- <string name="filedetails_sync_file">Actualizar archivo</string>
<string name="filedetails_renamed_in_upload_msg">El archivo fue renombrado como %1$s durante la subida</string>
- <string name="action_share_file">Enlace compartido</string>
+ <string name="action_share">Compartir</string>
<string name="common_yes">Sí</string>
<string name="common_no">No</string>
<string name="common_ok">Aceptar</string>
- <string name="common_cancel_download">Cancelar descarga</string>
- <string name="common_cancel_upload">Cancelar subida</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Guardar & Salir</string>
<string name="common_error">Error</string>
<string name="common_rename">Renombrar</string>
<string name="common_remove">Borrar</string>
<string name="confirmation_remove_local">Sólo local</string>
- <string name="confirmation_remove_folder_local">Sólo archivos locales</string>
- <string name="confirmation_remove_remote">Eliminar del servidor</string>
- <string name="confirmation_remove_remote_and_local">Tanto remoto como local</string>
+ <string name="confirmation_remove_folder_local">Sólo local</string>
<string name="remove_success_msg">Borrado correctamente</string>
<string name="remove_fail_msg">El borrado no pudo ser completado</string>
<string name="rename_dialog_title">Introduzca un nombre nuevo</string>
<string name="folder_picker_choose_button_text">Seleccionar</string>
<string name="prefs_category_security">Seguridad</string>
<string name="auth_host_address">Dirección del servidor</string>
+ <string name="share_dialog_title">Compartiendo</string>
+ <string name="share_via_link_section_title">Enlace compartido</string>
+ <string name="share_via_link_expiration_date_label">Establecer fecha de caducidad</string>
+ <string name="share_via_link_password_label">Protección con contraseña</string>
+ <string name="share_search">Buscar</string>
</resources>
<string name="drawer_item_settings">Ajustes</string>
<string name="drawer_item_logs">Registros</string>
<string name="drawer_close">Cerrar</string>
+ <string name="drawer_open">Abrir</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Más</string>
<string name="prefs_accounts">Cuentas</string>
<string name="file_list_seconds_ago">hace segundos</string>
<string name="file_list_empty">No hay nada aquí. ¡Suba algo!</string>
<string name="file_list_loading">Cargando...</string>
+ <string name="file_list_no_app_for_file_type">¡No se encontró una aplicación para el tipo de archivo!</string>
<string name="local_file_list_empty">No hay archivos en esta carpeta.</string>
<string name="filedetails_select_file">Pulsa sobre un archivo para mostrar información adicional.</string>
<string name="filedetails_size">Tamaño:</string>
<string name="filedetails_created">Creado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Descargar</string>
- <string name="filedetails_sync_file">Actualizar archivo</string>
+ <string name="filedetails_sync_file">Sincronizar</string>
<string name="filedetails_renamed_in_upload_msg">El fichero fue renombrado como %1$s durante la subida</string>
<string name="list_layout">Diseño de lista</string>
- <string name="action_share_file">Compartir con enlace</string>
- <string name="action_unshare_file">Dejar de compartir</string>
+ <string name="action_share">Compartir</string>
<string name="common_yes">Sí</string>
<string name="common_no">No</string>
<string name="common_ok">Aceptar</string>
- <string name="common_cancel_download">Cancelar descarga</string>
- <string name="common_cancel_upload">Cancelar subida</string>
+ <string name="common_cancel_sync">Cancelar sincronización</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Guardar & Salir</string>
<string name="common_error">Error</string>
<string name="pass_code_configure_your_pass_code_explanation">La contraseña será requerida cada vez que la aplicación sea iniciada</string>
<string name="pass_code_reenter_your_pass_code">Reintroduzca la contraseña, por favor.</string>
<string name="pass_code_remove_your_pass_code">Borre su contraseña</string>
- <string name="pass_code_mismatch">Las contraseñas no son identicas</string>
- <string name="pass_code_wrong">Contraseña incorrecta</string>
- <string name="pass_code_removed">Contraseña borrada</string>
+ <string name="pass_code_mismatch">Los códigos de acceso no son idénticos</string>
+ <string name="pass_code_wrong">Código de acceso incorrecto</string>
+ <string name="pass_code_removed">Código de acceso borrado</string>
<string name="pass_code_stored">Contraseña almacenada</string>
<string name="media_notif_ticker">Reproductor de música %1$s</string>
<string name="media_state_playing">%1$s (reproduciendo)</string>
<string name="unfavorite">No-favorito</string>
<string name="common_rename">Renombrar</string>
<string name="common_remove">Borrar</string>
- <string name="confirmation_remove_alert">¿Realmente desea eliminar %1$s?</string>
+ <string name="confirmation_remove_file_alert">¿Realmente desea eliminar %1$s?</string>
<string name="confirmation_remove_folder_alert">¿Realmente desea eliminar %1$s y todo su contenido?</string>
<string name="confirmation_remove_local">Sólo local</string>
- <string name="confirmation_remove_folder_local">Sólo ficheros locales</string>
- <string name="confirmation_remove_remote">Eliminar del servidor</string>
- <string name="confirmation_remove_remote_and_local">Tanto remoto como local</string>
+ <string name="confirmation_remove_folder_local">Sólo local</string>
+ <string name="confirmation_remove_file_remote">Desde el servidor</string>
+ <string name="confirmation_remove_remote_and_local">Remoto & local</string>
<string name="remove_success_msg">Borrado correctamente</string>
<string name="remove_fail_msg">El borrado no pudo ser completado</string>
<string name="rename_dialog_title">Introduzca un nombre nuevo</string>
<string name="ssl_validator_label_validity_to">A:</string>
<string name="ssl_validator_label_signature">Firma:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Firma:</string>
+ <string name="certificate_load_problem">Existe un problema al cargar el certificado.</string>
<string name="ssl_validator_null_cert">No se ha podido mostrar el certificado</string>
<string name="ssl_validator_no_info_about_error">- No hay información acerca del error</string>
<string name="placeholder_sentence">Esto es un marcador de posición</string>
<string name="instant_video_upload_on_wifi">Subir vídeos sólo por WiFi</string>
<string name="instant_upload_path">/SubidasInstantáneas</string>
<string name="conflict_title">Conflicto con archivo</string>
- <string name="conflict_message">¿Qué archivos desea mantener? Si selecciona ambas versiones, el archivo local tendrá un número añadido a su nombre.</string>
+ <string name="conflict_message">¿Cuáles archivos desea mantener? Si selecciona ambas versiones, el archivo local tendrá un número añadido a su nombre.</string>
<string name="conflict_keep_both">Mantener ambos</string>
- <string name="conflict_use_local_version">Usar versión local</string>
- <string name="conflict_use_server_version">Usar versión del servidor</string>
+ <string name="conflict_use_local_version">versión local</string>
+ <string name="conflict_use_server_version">versión del servidor</string>
<string name="preview_image_description">Previsualización de imagen</string>
<string name="preview_image_error_unknown_format">No se puede mostrar la imagen</string>
<string name="error__upload__local_file_not_copied">%1$s se pudo copiar a la carpeta local %2$s</string>
<string name="downloader_download_file_not_found">Este archivo ya no se encuentra en el servidor</string>
<string name="prefs_category_accounts">Cuentas</string>
<string name="prefs_add_account">Agregar cuenta</string>
- <string name="auth_redirect_non_secure_connection_title">La conexión segura está siendo desviada por una ruta insegura.</string>
+ <string name="auth_redirect_non_secure_connection_title">La conexión segura está siendo redirigida por una ruta insegura.</string>
<string name="actionbar_logger">Registros</string>
<string name="log_send_history_button">Enviar historial</string>
<string name="log_send_no_mail_app">No se ha encontrado una app para enviar logs. Instale la app mail!</string>
<string name="move_file_invalid_overwrite">El archivo ya existe en la carpeta de destino</string>
<string name="move_file_error">Hubo un error al tratar de mover este archivo o carpeta</string>
<string name="forbidden_permissions_move">para mover este archivo</string>
+ <string name="copy_file_not_found">No se puede copiar. Revise si existe el archivo</string>
+ <string name="copy_file_invalid_into_descendent">No se puede copiar una carpeta dentro de una de sus subcarpetas.</string>
+ <string name="copy_file_invalid_overwrite">El fichero ya existe en el directorio de destino</string>
+ <string name="copy_file_error">Hubo un error al tratar de copiar este archivo o carpeta</string>
+ <string name="forbidden_permissions_copy">para copiar este archivo</string>
<string name="prefs_category_instant_uploading">Subidas instantáneas</string>
<string name="prefs_category_security">Seguridad</string>
<string name="prefs_instant_video_upload_path_title">Guardar videos subidos en la carpeta:</string>
- <string name="download_folder_failed_content">La descarga de la carpeta %1$s no ha podido ser completada</string>
+ <string name="sync_folder_failed_content">La sincronización de la carpeta %1$s no se pudo completar</string>
<string name="shared_subject_header">compartido</string>
<string name="with_you_subject_header">con usted</string>
- <string name="subject_token">%1$s compartió \"%2$s\" conmigo</string>
- <string name="saml_subject_token">\"%1$s\" ha sido compartido con usted.</string>
+ <string name="subject_user_shared_with_you">%1$s compartió \"%2$s\" conmigo</string>
+ <string name="subject_shared_with_you">\"%1$s\" ha sido compartido con usted.</string>
<string name="auth_refresh_button">Refrescar la conexión</string>
<string name="auth_host_address">Dirección del servidor</string>
<string name="common_error_out_memory">No hay suficiente memoria</string>
<string name="file_list__footer__files">%1$d archivos</string>
<string name="file_list__footer__files_and_folder">%1$d archivos, 1 carpeta</string>
<string name="file_list__footer__files_and_folders">%1$d archivos, %2$d carpetas</string>
+ <string name="share_dialog_title">Compartiendo</string>
+ <string name="share_no_users">Aún no se ha compartido con ningún usuario.</string>
+ <string name="share_add_user_or_group">Añadir usuario o grupo</string>
+ <string name="share_via_link_section_title">Compartir enlace</string>
+ <string name="share_via_link_expiration_date_label">Establecer fecha de caducidad</string>
+ <string name="share_via_link_password_label">Protección con contraseña</string>
+ <string name="share_search">Buscar</string>
+ <string name="search_users_and_groups_hint">Buscar usuarios y grupos</string>
+ <string name="share_group_clarification">%1$s (grupo)</string>
+ <string name="share_sharee_unavailable">Lo siento, compartir no está disponible en su servidor.\nPor favor, contacte con su administrador</string>
</resources>
<string name="drawer_item_settings">Seaded</string>
<string name="drawer_item_logs">Logid</string>
<string name="drawer_close">Sulge</string>
+ <string name="drawer_open">Ava</string>
<string name="prefs_category_general">Üldine</string>
<string name="prefs_category_more">Rohkem</string>
<string name="prefs_accounts">Kontod</string>
<string name="filedetails_created">Loodud:</string>
<string name="filedetails_modified">Muudetud:</string>
<string name="filedetails_download">Lae alla</string>
- <string name="filedetails_sync_file">Värskenda faili</string>
<string name="filedetails_renamed_in_upload_msg">Fail nimetati üleslaadimise käigus ümber %1$ </string>
<string name="list_layout">Nimekirja paigutus</string>
- <string name="action_share_file">Jaga linki</string>
- <string name="action_unshare_file">Tühista lingi jagamine</string>
+ <string name="action_share">Jaga</string>
<string name="common_yes">Jah</string>
<string name="common_no">Ei</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Tühista allalaadimine</string>
- <string name="common_cancel_upload">Tühista üleslaadimine</string>
<string name="common_cancel">Loobu</string>
<string name="common_save_exit">Salvesta & Välju</string>
<string name="common_error">Viga</string>
<string name="unfavorite">Eemalda lemmik</string>
<string name="common_rename">Nimeta ümber</string>
<string name="common_remove">Eemalda</string>
- <string name="confirmation_remove_alert">Oled sa kindel, et soovid %1$s eemaldada?</string>
+ <string name="confirmation_remove_file_alert">Oled sa kindel, et soovid %1$s eemaldada?</string>
<string name="confirmation_remove_folder_alert">Kas sa tõesti soovid eemaldada %1$s ja selle sisu?</string>
<string name="confirmation_remove_local">Ainult kohalik</string>
- <string name="confirmation_remove_folder_local">Ainult kohalik sisu</string>
- <string name="confirmation_remove_remote">Eemalda serverist</string>
- <string name="confirmation_remove_remote_and_local">Eemalolev ja kohalik</string>
+ <string name="confirmation_remove_folder_local">Ainult kohalik</string>
+ <string name="confirmation_remove_file_remote">Serverist</string>
+ <string name="confirmation_remove_remote_and_local">Kaugfail & kohalik</string>
<string name="remove_success_msg">Eemaldamine oli edukas</string>
<string name="remove_fail_msg">Eemaldamine ebaõnnestus</string>
<string name="rename_dialog_title">Sisesta uus nimi</string>
<string name="instant_upload_on_wifi">Lae pilte üles ainult läbi WiFi</string>
<string name="instant_video_upload_on_wifi">Laadi videod üles ainult WiFi-t kasutades</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Failikonflikt</string>
+ <string name="conflict_message">Millist faili sa soovid säilitada? Kui valid mõlemad versioonid, siis lisatakse kohaliku faili nimele number.</string>
<string name="conflict_keep_both">Säilita mõlemad</string>
+ <string name="conflict_use_local_version">kohalik versioon</string>
+ <string name="conflict_use_server_version">serveri versioon</string>
<string name="preview_image_description">Pildi eelvaade</string>
<string name="preview_image_error_unknown_format">Seda pilti ei saa näidata</string>
<string name="error__upload__local_file_not_copied">%1$s ei suudetud kopeerida kohalikku kataloogi %2$s</string>
<string name="downloader_download_file_not_found">Fail ei ole serveris enam kättesaadav</string>
<string name="prefs_category_accounts">Kontod</string>
<string name="prefs_add_account">Lisa konto</string>
- <string name="auth_redirect_non_secure_connection_title">Turvaline ühendus suunatakse läbi turvamata ühenduse.</string>
+ <string name="auth_redirect_non_secure_connection_title">Turvalist ühendust suunatakse läbi turvamata ühenduse.</string>
<string name="actionbar_logger">Logid</string>
<string name="log_send_history_button">Saada ajalugu</string>
<string name="log_send_no_mail_app">Logide saatmise rakendust ei leitud. Paigalda postirakendus!</string>
<string name="move_file_invalid_overwrite">See fail on juba sihtkaustas olemas</string>
<string name="move_file_error">Selle faili või kausta liigutamisel tekkis tõrge</string>
<string name="forbidden_permissions_move">selle faili liigutamiseks</string>
+ <string name="copy_file_not_found">Kopeerimine ebaõnnestus. Palun kontrolli, kas fail on olemas</string>
+ <string name="copy_file_invalid_into_descendent">Kausta ei saa kopeerida tema enda alamkausta</string>
+ <string name="copy_file_invalid_overwrite">See fail on juba sihtkaustas olemas</string>
+ <string name="copy_file_error">Selle faili või kausta kopeerimisel tekkis tõrge</string>
+ <string name="forbidden_permissions_copy">et kopeerida seda faili</string>
<string name="prefs_category_instant_uploading">Kohesed üleslaadimised</string>
<string name="prefs_category_security">Turvalisus</string>
<string name="prefs_instant_video_upload_path_title">Video üleslaadimise asukoht</string>
- <string name="download_folder_failed_content">Kausta %1$s allalaadimine ei õnnestunud</string>
<string name="shared_subject_header">jagatud</string>
<string name="with_you_subject_header">sinuga</string>
- <string name="subject_token">%1$s jagas sinuga \"%2$s\"</string>
+ <string name="subject_user_shared_with_you">%1$s jagas sinuga \"%2$s\"</string>
+ <string name="subject_shared_with_you">\"%1$s\" on sinuga jagatud</string>
<string name="auth_refresh_button">Värskenda ühendust</string>
<string name="auth_host_address">Serveri aadress</string>
<string name="common_error_out_memory">Mälu pole piisavalt</string>
<string name="file_list__footer__files">%1$d faili</string>
<string name="file_list__footer__files_and_folder">%1$d faili, 1 kaust</string>
<string name="file_list__footer__files_and_folders">%1$d faili, %2$d kausta</string>
+ <string name="share_dialog_title">Jagamine</string>
+ <string name="share_via_link_section_title">Jaga linki</string>
+ <string name="share_via_link_expiration_date_label">Määra aegumise kuupäev</string>
+ <string name="share_via_link_password_label">Parooliga kaitstud</string>
+ <string name="share_search">Otsi</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Ireki</string>
<string name="prefs_category_general">Orokorra</string>
<string name="prefs_category_more">Gehiago</string>
<string name="prefs_accounts">Kontuak</string>
<string name="filedetails_created">Sortuta:</string>
<string name="filedetails_modified">Aldatuta:</string>
<string name="filedetails_download">Deskargatu</string>
- <string name="filedetails_sync_file">Freskatu fitxaegia</string>
<string name="filedetails_renamed_in_upload_msg">Fitxategiaren izena %1$sra aldatu da igotzean</string>
- <string name="action_share_file">Elkarbanatu lotura</string>
- <string name="action_unshare_file">Lotura partekatzeari utzi</string>
+ <string name="action_share">Partekatu</string>
<string name="common_yes">Bai</string>
<string name="common_no">Ez</string>
<string name="common_ok">Ados</string>
- <string name="common_cancel_download">Utzi deskarga bertan behera </string>
- <string name="common_cancel_upload">Ezeztatu igoera</string>
<string name="common_cancel">Ezeztatu</string>
<string name="common_save_exit">Gorde eta Irten</string>
<string name="common_error">Errorea</string>
<string name="favorite">Gogokoa</string>
<string name="common_rename">Berrizendatu</string>
<string name="common_remove">Ezabatu</string>
- <string name="confirmation_remove_alert">Ziur zaude %1$s ezabatu nahi duzula?</string>
+ <string name="confirmation_remove_file_alert">Ziur zaude %1$s ezabatu nahi duzula?</string>
<string name="confirmation_remove_folder_alert">Ziru zaude %1$s eta bere edukiak ezabatu nahi dituzula?</string>
<string name="confirmation_remove_local">Bertakoa bakarrik</string>
- <string name="confirmation_remove_folder_local">Eduki lokalak bakarrik</string>
- <string name="confirmation_remove_remote">Zerbitzaritik ezabatu</string>
- <string name="confirmation_remove_remote_and_local">Biak urrunekoa eta bertakoa</string>
+ <string name="confirmation_remove_folder_local">Bertakoa bakarrik</string>
<string name="remove_success_msg">Ongi ezabatu da</string>
<string name="remove_fail_msg">Ezin izan da ezabaketa burutu</string>
<string name="rename_dialog_title">Idatzi izen berri bat</string>
<string name="downloader_download_file_not_found">Fitxategia jadanik ez dago eskuragarri zerbitzarian</string>
<string name="prefs_category_accounts">Kontuak</string>
<string name="prefs_add_account">Gehitu kontua</string>
- <string name="auth_redirect_non_secure_connection_title">Konexio segurua birbideratu da segurua ez den bide batera.</string>
+ <string name="auth_redirect_non_secure_connection_title">Konexio segurua birbideratu da segurua ez den bide batetik.</string>
<string name="actionbar_logger">Egunkariak</string>
<string name="log_send_history_button">Bidali Historia</string>
<string name="log_send_no_mail_app">Egunkariak bidaltzeko aplikaziorik ez da aurkitu. Instalatu posta aplikazioa!</string>
<string name="move_file_invalid_overwrite">Fitxategia dagoeneko existitzen da helburuko karpetan</string>
<string name="move_file_error">Errore bat gertatu da fitxategi edo karpeta hau mugitzen saiatzerakoan</string>
<string name="forbidden_permissions_move">fitxategi hau mugitzeko</string>
+ <string name="copy_file_invalid_overwrite">Fitxategia dagoeneko existitzen da helburuko karpetan</string>
<string name="prefs_category_instant_uploading">Berehalako Igoerak</string>
<string name="prefs_category_security">Segurtasuna</string>
<string name="prefs_instant_video_upload_path_title">Bideo Igoera Bidea</string>
- <string name="download_folder_failed_content">%1$s karpetaren deskarga ezin izan da burutu</string>
<string name="auth_host_address">Zerbitzariaren helbidea</string>
+ <string name="share_dialog_title">Partekatzea</string>
+ <string name="share_via_link_section_title">Elkarbanatu lotura</string>
+ <string name="share_via_link_expiration_date_label">Ezarri muga data</string>
+ <string name="share_via_link_password_label">Babestu pasahitzarekin</string>
+ <string name="share_search">Bilatu</string>
</resources>
<string name="actionbar_settings">تنظیمات</string>
<string name="actionbar_see_details">جزئیات</string>
<string name="actionbar_send_file">ارسال</string>
+ <string name="actionbar_sort">مرتبسازی</string>
+ <string name="actionbar_sort_title">مرتبسازی بر اساس</string>
<!--TODO re-enable when server-side folder size calculation is available
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">تمامی فایلها</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_settings">تنظیمات</string>
+ <string name="drawer_item_logs">لاگها</string>
+ <string name="drawer_close">بستن</string>
+ <string name="drawer_open">باز کردن</string>
<string name="prefs_category_general">عمومی</string>
<string name="prefs_category_more">بیشتر</string>
<string name="prefs_accounts">حسابها</string>
<string name="prefs_manage_accounts">مدیریت حسابها</string>
+ <string name="prefs_instant_upload">آپلودهای فوری تصاویر</string>
+ <string name="prefs_instant_upload_summary">آپلود فوری تصاویر گرفته شده توسط دوربین</string>
+ <string name="prefs_instant_video_upload">آپلودهای فوری ویدئو</string>
+ <string name="prefs_instant_video_upload_summary">آپلود فوری ویدئوهای گرفته شده توسط دوربین</string>
<string name="prefs_log_title">فعال کردن ورود</string>
<string name="prefs_log_summary">این برای مشکلات ورود استفاده شده است.</string>
<string name="prefs_log_title_history">تاریخچه ورود</string>
<string name="uploader_info_uploading">در حال بارگزاری</string>
<string name="file_list_seconds_ago">ثانیهها پیش</string>
<string name="file_list_empty">اینجا هیچ چیز نیست.</string>
+ <string name="file_list_loading">بارگذاری ...</string>
<string name="local_file_list_empty">هیچ فایلی در این پوشه نیست.</string>
<string name="filedetails_select_file">روی هر فایل کلیک کنید تا اطلاعات اضافی نمایش داده شود.</string>
<string name="filedetails_size">اندازه</string>
<string name="filedetails_created">ایجاد شده توسط:</string>
<string name="filedetails_modified">تغییر یافته توسط:</string>
<string name="filedetails_download">بارگیری</string>
- <string name="filedetails_sync_file">بازنمایی فایل</string>
<string name="filedetails_renamed_in_upload_msg">فایل در هنگام بارگزاری به %1$s تغییر نام یافت</string>
- <string name="action_share_file">اشتراک گذاشتن لینک</string>
- <string name="action_unshare_file">لغو اشتراک گذاشتن لینک</string>
+ <string name="action_share">اشتراکگذاری</string>
<string name="common_yes">بله</string>
<string name="common_no">نه</string>
<string name="common_ok">باشه</string>
- <string name="common_cancel_download">قطع دانلود</string>
- <string name="common_cancel_upload">متوقف کردن بار گذاری</string>
<string name="common_cancel">منصرف شدن</string>
<string name="common_save_exit">ذخیره سازی و خروج</string>
<string name="common_error">خطا</string>
<string name="uploader_upload_succeeded_content_single">%1$s با موفقیت بار گذاری شد</string>
<string name="uploader_upload_failed_ticker">بارگزاری ناموفق بود</string>
<string name="uploader_upload_failed_content_single">بارگزاری %1$s نتوانست به طور کامل انجام شود</string>
+ <string name="uploader_upload_failed_credentials_error">آپلود ناموفق، لازم است دوباره وارد شوید</string>
<string name="downloader_download_in_progress_ticker">در حال بارگیری ...</string>
<string name="downloader_download_in_progress_content">%1$d%% در حال دانلود %2$s</string>
<string name="downloader_download_succeeded_ticker">بارگیری موفقیتآمیز بود</string>
<string name="downloader_download_failed_ticker">بارگیری ناموفق بود</string>
<string name="downloader_download_failed_content">دانلود %1$s نمی توانست به طور کامل انجام شود.</string>
<string name="downloader_not_downloaded_yet">دانلود هنوز به پایان نرسیده است.</string>
+ <string name="downloader_download_failed_credentials_error">دانلود ناموفق، لازم است دوباره وارد شوید</string>
<string name="common_choose_account">حساب کاربری را انتخاب کنید</string>
<string name="sync_fail_ticker">همگام سازی ناموفق</string>
+ <string name="sync_fail_ticker_unauthorized">همگامسازی ناموفق، لازم است دوباره وارد شوید</string>
<string name="sync_fail_content">همگام سازی %1$s نتوانست به طور کامل انجام شود</string>
<string name="sync_fail_content_unauthorized">رمز عبور نامعتبر برای %1$s</string>
<string name="sync_conflicts_in_favourites_ticker">ناسازگاری ها یافت شدند</string>
<string name="sync_fail_in_favourites_ticker">همگام سازی پرونده ها ناموفق بود.</string>
<string name="sync_fail_in_favourites_content">محتوای %1$d فایل ها نمی توانند همگام باشند(%2$d ناسازگاری)</string>
<string name="sync_foreign_files_forgotten_ticker">بعضی از فایلهای محلی فراموش شده اند</string>
+ <string name="sync_foreign_files_forgotten_content">%1$d fفایل از %2$s پوشه نتوانستند کپی شوند در</string>
<string name="sync_current_folder_was_removed">پوشه %1$s دیگر وجود ندارد</string>
<string name="foreign_files_move">انتقال همه</string>
<string name="foreign_files_success">همه ی فایل ها جا به جا شدند</string>
<string name="foreign_files_fail">بعضی از فایل ها نمی توانند انتقال یابند</string>
<string name="foreign_files_local_text">محلی: %1$s</string>
<string name="foreign_files_remote_text">دور از دسترس: %1$s</string>
+ <string name="pass_code_enter_pass_code">لطفا رمز خود را وارد کنید</string>
+ <string name="pass_code_configure_your_pass_code">رمز خود را وارد کنید</string>
+ <string name="pass_code_reenter_your_pass_code">رمز خود را مجددا وارد کنید</string>
+ <string name="pass_code_remove_your_pass_code">رمز خود را حذف کنید</string>
+ <string name="pass_code_mismatch">رمزهای وارد شده یکسان نیستند</string>
+ <string name="pass_code_wrong">رمز نادرست</string>
+ <string name="pass_code_removed">رمز حذف شد</string>
+ <string name="pass_code_stored">رمز ذخیره شد</string>
<string name="media_notif_ticker">%1$s پخش کننده موسیقی</string>
<string name="media_state_playing">%1$s ( در حال پخش موسیقی )</string>
<string name="media_state_loading">%1$s (درحال بارگذاری)</string>
<string name="auth_no_net_conn_title">هیچ ارتباطی به شبکه موجود نیست</string>
<string name="auth_nossl_plain_ok_title">اتصال امن در دسترس نیست</string>
<string name="auth_connection_established">اتصال برقرار شد</string>
+ <string name="auth_testing_connection">اجرای تست ارتباط</string>
<string name="auth_not_configured_title">پیکربندی سرور ناقص است</string>
<string name="auth_account_not_new">یک اکانت با همین نام کاربری و سرور بر روی این دستگاه موجود میباشد.</string>
<string name="auth_account_not_the_same">نام کاربری وارد شده با نام کاربری این اکانت مطابقت ندارد</string>
<string name="auth_connecting_auth_server">اتصال به سرور احراز هویت...</string>
<string name="auth_unsupported_auth_method">سرور این نوع احراز هویت را پشتیبانی نمیکند</string>
<string name="auth_unsupported_multiaccount">%1$s چند اکانته بودن را پشتیبانی نمیکند</string>
+ <string name="favorite">برگزیده</string>
<string name="common_rename">تغییرنام</string>
<string name="common_remove">حذف</string>
+ <string name="confirmation_remove_alert">آیا واقعا میخواهید %1$s حذف شود ؟</string>
+ <string name="confirmation_remove_folder_alert">آیا واقعا میخواهید %1$s و محتوای درون آن حذف شود ؟</string>
<string name="confirmation_remove_local">فقط محلی</string>
- <string name="confirmation_remove_folder_local">فقط محتوای محلی</string>
- <string name="confirmation_remove_remote">پاک کردن از سرور</string>
- <string name="confirmation_remove_remote_and_local">راه دور و محلی</string>
+ <string name="confirmation_remove_folder_local">فقط محلی</string>
+ <string name="confirmation_remove_remote">از سرور</string>
<string name="remove_success_msg">حذف با موفقیت انجام شد</string>
<string name="remove_fail_msg">حذف نا موفق بود</string>
<string name="rename_dialog_title">نام جدید وارد کنید</string>
<string name="rename_server_fail_msg">نامگذاری نمی تواند به طور کامل انجام شود</string>
<string name="sync_file_fail_msg">پرونده های دور از دسترس نمی توانند بررسی شوند.</string>
<string name="sync_file_nothing_to_do_msg">محتوای فایل قبلا همگام شده</string>
+ <string name="create_dir_fail_msg">پوشه نتوانست ایجاد شود</string>
<string name="filename_forbidden_characters">کاراکترهای ممنوع: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">نام فایل دارای حداقل یک کاراکتر نامعتبر است</string>
+ <string name="filename_empty">نام فایل نمی تواند خالی باشد</string>
<string name="wait_a_moment">لحظهای صبر کنید</string>
<string name="filedisplay_unexpected_bad_get_content">مشکل غیر متقربه، لطفا پرونده را از یک برنامه متفاوت انتخاب کنید.</string>
<string name="filedisplay_no_file_selected">هیچ پروندهای انتخاب نشده است</string>
<string name="activity_chooser_title">ارسال لینک به ...</string>
+ <string name="wait_for_tmp_copy_from_private_storage">کپی کردن فایل از حافظه خصوصی</string>
<string name="oauth_check_onoff">ورود با oAuth2 </string>
<string name="oauth_login_connection">اتصال به سرور oAuth2 ...</string>
<string name="ssl_validator_header">هویت این سایت نمی تواند تایید شود</string>
<string name="instant_upload_on_wifi">تصاویر را فقط از طریق wifi بارگذاری کن</string>
<string name="instant_video_upload_on_wifi">آپلود ویدیو فقط از طریق WiFi</string>
<string name="instant_upload_path">آپلود فوری</string>
+ <string name="conflict_title">تضاد در فایل</string>
+ <string name="conflict_message">کدام فایل را میخواهید نگه دارید ؟ اگر هردو نسخه را میخواهید، یک عدد به اول نام فایل محلی اضافه خواهد شد.</string>
<string name="conflict_keep_both">نگهداشتن هر دو</string>
+ <string name="conflict_use_local_version">نسخهی محلی</string>
+ <string name="conflict_use_server_version">نسخه سرور</string>
<string name="preview_image_description">پیش نمایش تصویر</string>
<string name="preview_image_error_unknown_format">نمایش این عکس امکانپذیر نمی باشد</string>
+ <string name="error__upload__local_file_not_copied">کپی %1$s به پوشه محلی %2$s امکان پذیر نیست</string>
+ <string name="prefs_instant_upload_path_title">مسیر آپلود</string>
<string name="share_link_file_error">در حین اشتراک گذاری این فایل یا پوشه خطایی رخ داده است</string>
<string name="unshare_link_file_error">در حین حذف اشتراک گذاری این فایل یا پوشه خطایی رخ داده است</string>
+ <string name="share_link_password_title">یک رمزعبور را وارد کنید</string>
+ <string name="share_link_empty_password">شما باید یک رمزعبور را وارد کنید</string>
<string name="activity_chooser_send_file_title">ارسال</string>
+ <string name="copy_link">کپی کردن لینک</string>
<string name="clipboard_text_copied">کپی به کلیپ بورد</string>
<string name="network_host_not_available">تکمیل عملیات امکانپذیر نمی باشد، سرور در دسترس نمی باشد</string>
<string name="empty"></string>
+ <string name="forbidden_permissions">شما دسترسی %s را ندارید</string>
<string name="forbidden_permissions_rename">برای تغییر نام این فایل</string>
<string name="forbidden_permissions_delete">برای حذف این فایل</string>
+ <string name="share_link_forbidden_permissions">اشتراکگذاری این فایل</string>
+ <string name="unshare_link_forbidden_permissions">حذف اشتراکگذاری این فایل</string>
<string name="forbidden_permissions_create">برای ایجاد این فایل</string>
<string name="uploader_upload_forbidden_permissions">برای آپلود در این پوشه</string>
<string name="downloader_download_file_not_found">این فایل دیگر روی سرور وجود ندارد</string>
<string name="prefs_category_accounts">حسابها</string>
+ <string name="prefs_add_account">ایحاد حساب کاربری</string>
+ <string name="actionbar_logger">لاگها</string>
+ <string name="log_send_history_button">تاریخچهی ارسال</string>
+ <string name="log_progress_dialog_text">بارگذاری داده...</string>
<string name="saml_authentication_required_text">احراز هویت مورد نیاز است</string>
<string name="saml_authentication_wrong_pass">رمز عبور اشتباه است</string>
+ <string name="actionbar_move">انتقال</string>
+ <string name="file_list_empty_moving">اینجا هیچی نیست، میتوانید پوشه اضافه کنید</string>
<string name="folder_picker_choose_button_text">انتخاب کردن</string>
+ <string name="move_file_not_found">امکان انتقال وجود ندارد، لطفا وجود فایل را بررسی کنید</string>
+ <string name="move_file_invalid_overwrite">این فایل هماکنون در پوشهی مقصد وجود دارد</string>
+ <string name="move_file_error">خطایی در زمان تلاش برای انتقال این فایل یا پوشه رخ داده است</string>
+ <string name="forbidden_permissions_move">انتقال این فایل</string>
+ <string name="copy_file_not_found">امکان کپی وجود ندارد، لطفا وجود فایل را بررسی کنید</string>
+ <string name="copy_file_invalid_overwrite">این فایل هماکنون در پوشهی مقصد وجود دارد</string>
+ <string name="copy_file_error">یک خطا در زمان تلاش برای کپی این فایل یا شاخه رخ داد</string>
+ <string name="forbidden_permissions_copy">کپی این فایل</string>
+ <string name="prefs_category_instant_uploading">آپلودهای فوری</string>
<string name="prefs_category_security">امنیت</string>
+ <string name="prefs_instant_video_upload_path_title">مسیر آپلود ویدئو</string>
+ <string name="shared_subject_header">به اشتراک گذاشته شد</string>
+ <string name="with_you_subject_header">با تو</string>
+ <string name="subject_user_shared_with_you">\"%2$s\" توسط %1$s با شما به اشتراک گذاشته شد</string>
+ <string name="subject_shared_with_you">\"%1$s\" با شما به اشتراک گذاشته شد</string>
+ <string name="auth_refresh_button">بروزرسانی ارتباط</string>
<string name="auth_host_address">آدرس سرور</string>
+ <string name="common_error_out_memory">حافظه کافی وجود ندارد</string>
+ <string name="username">نام کاربری</string>
+ <string name="file_list__footer__folder">1 پوشه</string>
+ <string name="file_list__footer__folders">%1$d پوشه</string>
+ <string name="file_list__footer__file">1 فایل</string>
+ <string name="file_list__footer__file_and_folder">1 فایل، 1 پوشه</string>
+ <string name="file_list__footer__file_and_folders">1 فایل، %1$d پوشه</string>
+ <string name="file_list__footer__files">%1$d فایل</string>
+ <string name="file_list__footer__files_and_folder">%1$d فایل، 1 پوشه</string>
+ <string name="file_list__footer__files_and_folders">%1$d فایل, %2$d پوشه</string>
+ <string name="share_dialog_title">اشتراک گذاری</string>
+ <string name="share_via_link_section_title">اشتراک گذاشتن لینک</string>
+ <string name="share_via_link_expiration_date_label">تنظیم تاریخ انقضا</string>
+ <string name="share_via_link_password_label">نگهداری کردن رمز عبور</string>
+ <string name="share_search">جستوجو</string>
</resources>
<string name="drawer_item_settings">Asetukset</string>
<string name="drawer_item_logs">Lokit</string>
<string name="drawer_close">Sulje</string>
+ <string name="drawer_open">Avaa</string>
<string name="prefs_category_general">Yleiset</string>
<string name="prefs_category_more">Enemmän</string>
<string name="prefs_accounts">Tilit</string>
<string name="file_list_seconds_ago">sekuntia sitten</string>
<string name="file_list_empty">Täällä ei ole mitään. Lähetä tänne jotakin!</string>
<string name="file_list_loading">Ladataan…</string>
+ <string name="file_list_no_app_for_file_type">Tälle tiedostotyypille ei löytynyt sovellusta!</string>
<string name="local_file_list_empty">Tässä kansiossa ei ole tiedostoja</string>
<string name="filedetails_select_file">Napauta tiedostoa nähdäksesi lisätietoja.</string>
<string name="filedetails_size">Koko:</string>
<string name="filedetails_created">Luotu:</string>
<string name="filedetails_modified">Muokattu:</string>
<string name="filedetails_download">Lataa</string>
- <string name="filedetails_sync_file">Päivitä tiedosto</string>
+ <string name="filedetails_sync_file">Synkronoi</string>
<string name="filedetails_renamed_in_upload_msg">Tiedoston nimeksi muutettiin %1$s siirron yhteydessä</string>
<string name="list_layout">Luettelon asettelu</string>
- <string name="action_share_file">Jaa linkki</string>
- <string name="action_unshare_file">Poista linkin jako</string>
+ <string name="action_share">Jaa</string>
<string name="common_yes">Kyllä</string>
<string name="common_no">Ei</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Peru lataus</string>
- <string name="common_cancel_upload">Peru lähetys</string>
+ <string name="common_cancel_sync">Peru synkronointi</string>
<string name="common_cancel">Peru</string>
<string name="common_save_exit">Tallenna ja poistu</string>
<string name="common_error">Virhe</string>
<string name="unfavorite">Poista suosikeista</string>
<string name="common_rename">Nimeä uudelleen</string>
<string name="common_remove">Poista</string>
- <string name="confirmation_remove_alert">Haluatko varmasti poistaa kohteen %1$s?</string>
+ <string name="confirmation_remove_file_alert">Haluatko varmasti poistaa kohteen %1$s?</string>
<string name="confirmation_remove_folder_alert">Haluatko varmasti poistaa kohteen %1$s ja sen sisällön?</string>
<string name="confirmation_remove_local">Vain paikallinen</string>
- <string name="confirmation_remove_folder_local">Vain paikallinen sisältö</string>
- <string name="confirmation_remove_remote">Poista palvelimelta</string>
- <string name="confirmation_remove_remote_and_local">Sekä etä- että paikallinen</string>
+ <string name="confirmation_remove_folder_local">Vain paikallinen</string>
+ <string name="confirmation_remove_file_remote">Palvelimelta</string>
+ <string name="confirmation_remove_remote_and_local">Etä ja paikallinen</string>
<string name="remove_success_msg">Poistettu onnistuneesti</string>
<string name="remove_fail_msg">Poistamista ei voitu suorittaa loppuun asti</string>
<string name="rename_dialog_title">Anna uusi nimi</string>
<string name="ssl_validator_label_validity_to">Päättyen:</string>
<string name="ssl_validator_label_signature">Allekirjoitus:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritmi:</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Sormenjälki:</string>
+ <string name="certificate_load_problem">Varmennetta ladatessa ilmeni ongelmia.</string>
<string name="ssl_validator_null_cert">Varmennetta ei voi näyttää.</string>
<string name="ssl_validator_no_info_about_error">- Ei lisätietoja virheestä</string>
<string name="placeholder_filetype">PNG-kuva</string>
<string name="conflict_title">Tiedoston ristiriita</string>
<string name="conflict_message">Mitkä tiedostot haluat säilyttää? Jos valitset kummatkin versiot, paikallisen version tiedoston nimeen lisätään numero.</string>
<string name="conflict_keep_both">Säilytä molemmat</string>
- <string name="conflict_use_local_version">Käytä paikallista versiota</string>
- <string name="conflict_use_server_version">Käytä palvelimen versiota</string>
+ <string name="conflict_use_local_version">paikallinen versio</string>
+ <string name="conflict_use_server_version">palvelimen versio</string>
<string name="preview_image_description">Kuvan esikatselu</string>
<string name="preview_image_error_unknown_format">Tätä kuvaa ei voi näyttää</string>
<string name="prefs_instant_upload_path_title">Lähetyspolku</string>
<string name="move_file_not_found">Siirto ei onnistu. Tarkista, ettei tiedostoa ole jo olemassa</string>
<string name="move_file_invalid_overwrite">Tiedosto on jo olemassa kohdekansiossa</string>
<string name="move_file_error">Tämän tiedoston tai kansion siirtoa yrittäessä tapahtui virhe</string>
+ <string name="copy_file_not_found">Kopiointi epäonnistui. Tarkista onko tiedostoa olemassa</string>
+ <string name="copy_file_invalid_overwrite">Tiedosto on jo kohdekansiossa.</string>
+ <string name="copy_file_error">Tätä tiedostoa tai kansiota kopioitaessa tapahtui virhe</string>
<string name="prefs_category_instant_uploading">Välittömät lähetykset</string>
<string name="prefs_category_security">Tietoturva</string>
+ <string name="prefs_instant_video_upload_path_title">Videoiden lähetyspolku</string>
+ <string name="sync_folder_failed_content">Kansion %1$s synkronointia ei voitu suorittaa kokonaan</string>
<string name="shared_subject_header">jaettu</string>
<string name="with_you_subject_header">kanssasi</string>
- <string name="subject_token">%1$s jakoi kohteen \"%2$s\" kanssasi</string>
- <string name="saml_subject_token">\"%1$s\" on jaettu kanssasi</string>
+ <string name="subject_user_shared_with_you">%1$s jakoi kohteen \"%2$s\" kanssasi</string>
+ <string name="subject_shared_with_you">\"%1$s\" on jaettu kanssasi</string>
<string name="auth_refresh_button">Päivitä yhteys</string>
<string name="auth_host_address">Palvelimen osoite</string>
<string name="common_error_out_memory">Muistia ei ole riittävästi</string>
<string name="file_list__footer__files">%1$d tiedostoa</string>
<string name="file_list__footer__files_and_folder">%1$d tiedostoa, 1 kansio</string>
<string name="file_list__footer__files_and_folders">%1$d tiedostoa, %2$d kansiota</string>
+ <string name="share_dialog_title">Jakaminen</string>
+ <string name="share_with_user_section_title">Jaa käyttäjien ja ryhmien kanssa</string>
+ <string name="share_add_user_or_group">Lisää käyttäjä tai ryhmä</string>
+ <string name="share_via_link_section_title">Jaa linkki</string>
+ <string name="share_via_link_expiration_date_label">Aseta päättymispäivä</string>
+ <string name="share_via_link_password_label">Suojaa salasanalla</string>
+ <string name="share_search">Etsi</string>
+ <string name="search_users_and_groups_hint">Etsi käyttäjiä ja ryhmiä</string>
+ <string name="share_group_clarification">%1$s (ryhmä)</string>
</resources>
<string name="drawer_item_settings">Paramètres</string>
<string name="drawer_item_logs">Logs</string>
<string name="drawer_close">Fermer</string>
+ <string name="drawer_open">Ouvrir</string>
<string name="prefs_category_general">Général</string>
<string name="prefs_category_more">Plus</string>
<string name="prefs_accounts">Comptes</string>
<string name="file_list_seconds_ago">il y a quelques secondes</string>
<string name="file_list_empty">Il n\'y a rien ici ! Envoyez donc quelque chose :)</string>
<string name="file_list_loading">Chargement...</string>
+ <string name="file_list_no_app_for_file_type">Aucune app trouvée pour ce type de fichier !</string>
<string name="local_file_list_empty">Aucun fichier n\'est présent dans ce dossier.</string>
- <string name="filedetails_select_file">Appuyez sur un fichier pour afficher les informations supplémentaires</string>
+ <string name="filedetails_select_file">Sélectionnez un fichier pour afficher des informations supplémentaires</string>
<string name="filedetails_size">Taille :</string>
<string name="filedetails_type">Type :</string>
<string name="filedetails_created">Créé le :</string>
<string name="filedetails_modified">Modifié le :</string>
<string name="filedetails_download">Télécharger</string>
- <string name="filedetails_sync_file">Actualiser le fichier</string>
+ <string name="filedetails_sync_file">Synchroniser</string>
<string name="filedetails_renamed_in_upload_msg">Le fichier a été renommé en %s pendant le téléversement</string>
<string name="list_layout">Affichage en liste</string>
- <string name="action_share_file">Partager le lien</string>
- <string name="action_unshare_file">Ne plus partager ce lien</string>
+ <string name="action_share">Partage</string>
<string name="common_yes">Oui</string>
<string name="common_no">Non</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Annuler le téléchargement</string>
- <string name="common_cancel_upload">Annuler le téléversement</string>
+ <string name="common_cancel_sync">Annuler la synchronisation</string>
<string name="common_cancel">Annuler</string>
<string name="common_save_exit">Sauvegarder & Quitter</string>
<string name="common_error">Erreur</string>
<string name="auth_can_not_auth_against_server">Impossible de s\'authentifier sur ce serveur</string>
<string name="auth_account_does_not_exist">Le compte n\'existe pas encore sur ce périphérique</string>
<string name="favorite">Ajouter aux favoris</string>
- <string name="unfavorite">Supprimer des favoris</string>
+ <string name="unfavorite">Retirer des favoris</string>
<string name="common_rename">Renommer</string>
<string name="common_remove">Supprimer</string>
- <string name="confirmation_remove_alert">Voulez-vous vraiment supprimer %1$s ?</string>
+ <string name="confirmation_remove_file_alert">Voulez-vous vraiment supprimer %1$s ?</string>
<string name="confirmation_remove_folder_alert">Voulez-vous vraiment supprimer %1$s et son contenu ?</string>
<string name="confirmation_remove_local">Local seulement</string>
- <string name="confirmation_remove_folder_local">Contenu local uniquement</string>
- <string name="confirmation_remove_remote">Effacer du serveur</string>
- <string name="confirmation_remove_remote_and_local">Distant et local</string>
+ <string name="confirmation_remove_folder_local">Local seulement</string>
+ <string name="confirmation_remove_file_remote">Depuis le serveur</string>
+ <string name="confirmation_remove_remote_and_local">Distant & local</string>
<string name="remove_success_msg">Suppression effectuée avec succès</string>
<string name="remove_fail_msg">Suppression impossible</string>
<string name="rename_dialog_title">Entrez un nouveau nom</string>
<string name="ssl_validator_label_validity_to">Au :</string>
<string name="ssl_validator_label_signature">Signature :</string>
<string name="ssl_validator_label_signature_algorithm">Algorithme :</string>
+ <string name="digest_algorithm_not_available">Cet algorithme de hachage n\'est pas disponible sur votre téléphone.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Empreinte numérique :</string>
+ <string name="certificate_load_problem">Le chargement du certificat pose problème.</string>
<string name="ssl_validator_null_cert">Impossible d\'afficher le certificat.</string>
<string name="ssl_validator_no_info_about_error">- Aucune information sur l\'erreur</string>
<string name="placeholder_sentence">Ceci est un espace réservé</string>
<string name="instant_upload_on_wifi">Téléverser les images via une connexion WiFi uniquement</string>
<string name="instant_video_upload_on_wifi">Téléverser les vidéos via une connexion WiFi uniquement</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Conflit de fichiers</string>
+ <string name="conflict_message">Quel(s) fichier(s) voulez-vous garder ? Si vous sélectionnez les deux, un chiffre sera ajouté au nom du fichier local.</string>
<string name="conflict_keep_both">Garder les deux versions</string>
+ <string name="conflict_use_local_version">version locale</string>
+ <string name="conflict_use_server_version">version serveur</string>
<string name="preview_image_description">Prévisualisation de l\'image</string>
<string name="preview_image_error_unknown_format">Cette image ne peut pas être affichée</string>
<string name="error__upload__local_file_not_copied">%1$s n\'a pas pu être copié dans le dossier local %2$s</string>
<string name="share_link_file_error">Une erreur est survenue lors de la tentative de partage de ce fichier ou répertoire</string>
<string name="unshare_link_file_no_exist">Impossible de supprimer le partage. Vérifiez que le fichier est bien présent</string>
<string name="unshare_link_file_error">Une erreur est survenue lors de la tentative d’annulation du partage de ce fichier ou répertoire</string>
+ <string name="update_link_file_no_exist">Actualisation impossible. Veuillez vérifier si ce fichier existe</string>
+ <string name="update_link_file_error">Une erreur est survenue lors de la tentative de rafraîchissement du lien partagé</string>
<string name="share_link_password_title">Saisissez un mot de passe</string>
<string name="share_link_empty_password">Vous devez saisir un mot de passe</string>
<string name="activity_chooser_send_file_title">Envoyer</string>
<string name="copy_link">Copier le lien</string>
- <string name="clipboard_text_copied">Copié dans le presse-papiers</string>
- <string name="error_cant_bind_to_operations_service">Erreur critique : impossible de réaliser des opérations</string>
+ <string name="clipboard_text_copied">Copié dans le presse-papier</string>
+ <string name="error_cant_bind_to_operations_service">Erreur critique : impossible de réaliser les opérations</string>
<string name="network_error_socket_exception">Une erreur est survenue pendant la connexion au serveur.</string>
<string name="network_error_socket_timeout_exception">Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée</string>
<string name="network_error_connect_timeout_exception">Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée</string>
<string name="network_host_not_available">L\'opération n\'a pas pu être terminée, le serveur n\'est pas disponible</string>
<string name="empty"></string>
- <string name="forbidden_permissions">Vous ne possédez pas les droits suffisants %s</string>
- <string name="forbidden_permissions_rename">afin de renommer ce fichier</string>
- <string name="forbidden_permissions_delete">afin d’effacer ce fichier</string>
+ <string name="forbidden_permissions">Vous n\'avez pas la permission %s</string>
+ <string name="forbidden_permissions_rename">de renommer ce fichier</string>
+ <string name="forbidden_permissions_delete">d’effacer ce fichier</string>
<string name="share_link_forbidden_permissions">afin de partager ce fichier</string>
<string name="unshare_link_forbidden_permissions">afin de ne plus partager ce fichier</string>
- <string name="forbidden_permissions_create">afin de créer ce fichier</string>
+ <string name="update_link_forbidden_permissions">pour mettre à jour ce lien partagé</string>
+ <string name="forbidden_permissions_create">de créer ce fichier</string>
<string name="uploader_upload_forbidden_permissions">afin d’importer dans ce répertoire</string>
<string name="downloader_download_file_not_found">Ce fichier n’est plus disponible sur le serveur</string>
<string name="prefs_category_accounts">Comptes</string>
<string name="auth_redirect_non_secure_connection_title">Le connexion sécurisée est redirigée vers une route non-sécurisée.</string>
<string name="actionbar_logger">Journaux</string>
<string name="log_send_history_button">Envoyer l\'historique</string>
- <string name="log_send_no_mail_app">Aucune application trouvée pour l\'envoi de journaux. Installer une application de courriel !</string>
+ <string name="log_send_no_mail_app">Aucune application trouvée pour l\'envoi de logs. Installer une application de courriel !</string>
<string name="log_send_mail_subject">Journaux de l\'application Android %1$s</string>
<string name="log_progress_dialog_text">Chargement des données…</string>
<string name="saml_authentication_required_text">Authentification requise</string>
<string name="move_file_invalid_overwrite">Le fichier existe déjà dans le dossier de destination</string>
<string name="move_file_error">Une erreur est survenue lors de la tentative de déplacement de ce fichier ou dossier</string>
<string name="forbidden_permissions_move">de déplacer ce fichier</string>
+ <string name="copy_file_not_found">Impossible de copier. Vérifiez que le fichier existe</string>
+ <string name="copy_file_invalid_into_descendent">Il n\'est pas possible de copier un dossier vers un de ses descendants</string>
+ <string name="copy_file_invalid_overwrite">Fichier déjà existant dans le dossier de destination</string>
+ <string name="copy_file_error">Une erreur est survenue lors de la copie de ce fichier ou dossier</string>
+ <string name="forbidden_permissions_copy">de copier ce fichier</string>
<string name="prefs_category_instant_uploading">Téléversement immédiat</string>
<string name="prefs_category_security">Sécurité</string>
<string name="prefs_instant_video_upload_path_title">Répertoire de téléversement des vidéos</string>
- <string name="download_folder_failed_content">Le téléchargement du dossier %1$s n\'a pas pu être achevé</string>
+ <string name="sync_folder_failed_content">La synchronisation du dossier %1$s n\'a pas pu être terminée</string>
<string name="shared_subject_header">a partagé</string>
<string name="with_you_subject_header">avec vous</string>
- <string name="subject_token">%1$s a partagé \"%2$s\" avec vous</string>
+ <string name="subject_user_shared_with_you">%1$s a partagé \"%2$s\" avec vous</string>
+ <string name="subject_shared_with_you">\"%1$s\" a été partagé avec vous</string>
<string name="auth_refresh_button">Actualiser la connexion</string>
<string name="auth_host_address">Adresse du serveur</string>
<string name="common_error_out_memory">Mémoire insuffisante</string>
<string name="file_list__footer__files">%1$d fichiers</string>
<string name="file_list__footer__files_and_folder">%1$d fichiers, 1 dossier</string>
<string name="file_list__footer__files_and_folders">%1$d fichiers, %2$d dossiers</string>
+ <string name="share_dialog_title">Partage</string>
+ <string name="share_with_user_section_title">Partager avec des utilisateurs et des groupes</string>
+ <string name="share_no_users">Aucune donnée partagée avec des utilisateurs pour le moment</string>
+ <string name="share_add_user_or_group">Ajouter un Utilisateur ou un Groupe</string>
+ <string name="share_via_link_section_title">Partager par lien public</string>
+ <string name="share_via_link_expiration_date_label">Spécifier une date d\'expiration</string>
+ <string name="share_via_link_password_label">Protéger par un mot de passe</string>
+ <string name="share_via_link_password_title">Sécurisé</string>
+ <string name="share_get_public_link_button">Obtenir le lien</string>
+ <string name="share_search">Rechercher</string>
+ <string name="search_users_and_groups_hint">Chercher parmi les utilisateurs et groupes</string>
+ <string name="share_group_clarification">%1$s (groupe)</string>
+ <string name="share_sharee_unavailable">Désolé, la version du serveur ne permet pas aux applications d\'initier des partage avec d\'autres utilisateurs.
+\nVeuillez contacter votre administrateur</string>
</resources>
<string name="drawer_item_settings">Axustes</string>
<string name="drawer_item_logs">Rexistros</string>
<string name="drawer_close">Pechar</string>
+ <string name="drawer_open">Abrir</string>
<string name="prefs_category_general">Xeral</string>
<string name="prefs_category_more">Máis</string>
<string name="prefs_accounts">Contas</string>
<string name="file_list_seconds_ago">segundos atrás</string>
<string name="file_list_empty">Aquí non hai nada. Envíe algo!</string>
<string name="file_list_loading">Cargando...</string>
+ <string name="file_list_no_app_for_file_type">Non se atopou un App para este tipo de ficheiro!</string>
<string name="local_file_list_empty">Non hai ficheiros neste cartafol.</string>
<string name="filedetails_select_file">Prema nun ficheiro para que amose a información adicional.</string>
<string name="filedetails_size">Tamaño:</string>
<string name="filedetails_created">Creado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Descargar</string>
- <string name="filedetails_sync_file">Actualizar o ficheiro</string>
+ <string name="filedetails_sync_file">Sincronizar</string>
<string name="filedetails_renamed_in_upload_msg">O ficheiro foi renomeado a %1$s durante o envío</string>
<string name="list_layout">Deseño da lista</string>
- <string name="action_share_file">Ligazón para compartir</string>
- <string name="action_unshare_file">Deixar de compartir a ligazón</string>
+ <string name="action_share">Compartir</string>
<string name="common_yes">Si</string>
<string name="common_no">Non</string>
<string name="common_ok">Aceptar</string>
- <string name="common_cancel_download">Cancelar a descarga</string>
- <string name="common_cancel_upload">Cancelar o envío</string>
+ <string name="common_cancel_sync">Parar a sincronización</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Gardar e saír</string>
<string name="common_error">Erro</string>
<string name="unfavorite">Retirar de favoritos</string>
<string name="common_rename">Renomear</string>
<string name="common_remove">Retirar</string>
- <string name="confirmation_remove_alert">Confirma que quere retirar %1$s?</string>
+ <string name="confirmation_remove_file_alert">Confirma que quere retirar %1$s?</string>
<string name="confirmation_remove_folder_alert">Confirma que quere retirar %1$s e o seu contido?</string>
<string name="confirmation_remove_local">Só local</string>
- <string name="confirmation_remove_folder_local">Só contidos locais</string>
- <string name="confirmation_remove_remote">Retirar do servidor</string>
+ <string name="confirmation_remove_folder_local">Só local</string>
+ <string name="confirmation_remove_remote">Desde servidor</string>
<string name="confirmation_remove_remote_and_local">Remoto e local</string>
<string name="remove_success_msg">Retirado correctamente</string>
<string name="remove_fail_msg">Non foi posíbel retiralo</string>
<string name="conflict_title">Conflito de ficheiro</string>
<string name="conflict_message">Que ficheiros quere conservar? Se selecciona ambas versións, o ficheiro copiado terá un número engadido ao nome.</string>
<string name="conflict_keep_both">Manter ambos</string>
- <string name="conflict_use_local_version">Usar a versión local</string>
- <string name="conflict_use_server_version">Usar a versión do servidor</string>
+ <string name="conflict_use_local_version">versión local</string>
+ <string name="conflict_use_server_version">versión no servidor</string>
<string name="preview_image_description">Vista previa da imaxe</string>
<string name="preview_image_error_unknown_format">Esta imaxe non pode ser amosada</string>
<string name="error__upload__local_file_not_copied">Non foi posíbel copiar %1$s no cartafol local %2$s</string>
<string name="downloader_download_file_not_found">O ficheiro xa non está dispoñíbel no servidor</string>
<string name="prefs_category_accounts">Contas</string>
<string name="prefs_add_account">Engadir unha conta</string>
- <string name="auth_redirect_non_secure_connection_title">A conexión segura está a ser redirixida a unha ruta non segura.</string>
+ <string name="auth_redirect_non_secure_connection_title">A conexión segura está a ser redirixida a través dunha ruta non segura.</string>
<string name="actionbar_logger">Rexistros</string>
<string name="log_send_history_button">Enviar o historial</string>
<string name="log_send_no_mail_app">Non se atopou unha aplicación para enviar os rexistros. Instale unha aplicación de correo!</string>
<string name="move_file_invalid_overwrite">Este ficheiro xa existe no cartafol de destino</string>
<string name="move_file_error">Produciuse un erro ao tentar mover este ficheiro ou cartafol.</string>
<string name="forbidden_permissions_move">para mover este ficheiro</string>
+ <string name="copy_file_not_found">Non se puido copiar. Por favor comprobe que o ficheiro existe</string>
+ <string name="copy_file_invalid_into_descendent">Non é posible copiar un cartafol nun descendente seu</string>
+ <string name="copy_file_invalid_overwrite">Este ficheiro xa existe no cartafol de destino</string>
+ <string name="copy_file_error">Oconteceu un erro mentras se intentaba copiar este ficheiro ou cartafol</string>
+ <string name="forbidden_permissions_copy">copiar este ficheiro</string>
<string name="prefs_category_instant_uploading">Envío instantáneo</string>
<string name="prefs_category_security">Seguridade</string>
<string name="prefs_instant_video_upload_path_title">Enviar a ruta do vídeo</string>
- <string name="download_folder_failed_content">Non foi posíbel completar a descarga do cartafol %1$s</string>
+ <string name="sync_folder_failed_content">A sincronización do cartafol %1$s non se completou</string>
<string name="shared_subject_header">compartido</string>
<string name="with_you_subject_header">con vostede</string>
- <string name="subject_token">%1$s compartiu «%2$s» con vostede</string>
- <string name="saml_subject_token">«%1$s» foi compartido con vostede</string>
+ <string name="subject_user_shared_with_you">%1$s compartiu «%2$s» con vostede</string>
+ <string name="subject_shared_with_you">«%1$s» foi compartido con vostede</string>
<string name="auth_refresh_button">Actualizar a conexión</string>
<string name="auth_host_address">Enderezo do servidor</string>
<string name="common_error_out_memory">Non hai memoria abondo</string>
<string name="file_list__footer__files">%1$d ficheiros</string>
<string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 cartafol</string>
<string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d cartafoles</string>
+ <string name="share_dialog_title">Compartindo</string>
+ <string name="share_no_users">Aínda non hai datos compartidos con usuarios</string>
+ <string name="share_add_user_or_group">Engadir Usuario ou Grupo</string>
+ <string name="share_via_link_section_title">Ligazón para compartir</string>
+ <string name="share_via_link_expiration_date_label">Definir a data de caducidade</string>
+ <string name="share_via_link_password_label">Protexido con contrasinal</string>
+ <string name="share_search">Buscar</string>
+ <string name="search_users_and_groups_hint">Buscar usuarios e grupos</string>
+ <string name="share_group_clarification">%1$s (grupo)</string>
+ <string name="share_sharee_unavailable">Sentímolo, pero a versión do seu servidor non permite compartir con usuarios desde o cliente.
+\nPor favor contacte co seu administrador</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">פתיחה</string>
<string name="prefs_category_general">כללי</string>
<string name="prefs_category_more">יותר</string>
<string name="prefs_accounts">חשבונות</string>
<string name="filedetails_created">מועד היצירה:</string>
<string name="filedetails_modified">מועד השינוי:</string>
<string name="filedetails_download">הורדה</string>
- <string name="filedetails_sync_file">רענון קובץ</string>
<string name="filedetails_renamed_in_upload_msg">שם הקובץ השתנה ל־ %1$s במהלך ההעלאה</string>
- <string name="action_share_file">קישור לשיתוף</string>
- <string name="action_unshare_file">ביטול קישור לשיתוף</string>
+ <string name="action_share">שיתוף</string>
<string name="common_yes">כן</string>
<string name="common_no">לא</string>
<string name="common_ok">אישור</string>
- <string name="common_cancel_download">ביטול ההורדה</string>
- <string name="common_cancel_upload">ביטול ההעלאה</string>
<string name="common_cancel">ביטול</string>
<string name="common_save_exit">לשמור ולצאת</string>
<string name="common_error">שגיאה</string>
<string name="favorite">מועדף</string>
<string name="common_rename">שינוי שם</string>
<string name="common_remove">הסרה</string>
- <string name="confirmation_remove_alert">האם באמת להסיר %1$s?</string>
+ <string name="confirmation_remove_file_alert">האם באמת להסיר %1$s?</string>
<string name="confirmation_remove_folder_alert">האם באמת להסיר %1$s ואת כל התכולה?</string>
<string name="confirmation_remove_local">מקומי בלבד</string>
- <string name="confirmation_remove_folder_local">תכנים מקומיים בלבד</string>
- <string name="confirmation_remove_remote">הסרה מהשרת</string>
- <string name="confirmation_remove_remote_and_local">מרוחק ומקומי</string>
+ <string name="confirmation_remove_folder_local">מקומי בלבד</string>
<string name="remove_success_msg">ההסרה הצליחה</string>
<string name="remove_fail_msg">ההסרה נכשלה</string>
<string name="rename_dialog_title">נא להזין שם חדש</string>
<string name="downloader_download_file_not_found">הקובץ אינו זמין יותר על השרת</string>
<string name="prefs_category_accounts">חשבונות</string>
<string name="prefs_add_account">הוספת חשבון</string>
+ <string name="auth_redirect_non_secure_connection_title">חיבור מאובטח מנותב דרך נתיב לא מאובטח</string>
<string name="folder_picker_choose_button_text">בחירה</string>
<string name="prefs_category_security">אבטחה</string>
<string name="auth_host_address">כתובת שרת</string>
+ <string name="share_dialog_title">שיתוף</string>
+ <string name="share_via_link_section_title">קישור לשיתוף</string>
+ <string name="share_via_link_expiration_date_label">הגדרת תאריך תפוגה</string>
+ <string name="share_via_link_password_label">הגנה בססמה</string>
+ <string name="share_search">חיפוש</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
+ <!--TODO re-enable when server-side folder size calculation is available
+ <item>Biggest - Smallest</item>-->
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<string name="drawer_item_accounts">Accounts</string>-->
+ <!--TODO re-enable when "On Device" is available
+ <string name="drawer_item_on_device">On device</string>-->
<string name="empty"></string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">खोलें</string>
<string name="prefs_category_general">सामान्य </string>
<string name="prefs_category_more">और अधिक</string>
<string name="prefs_accounts">खाते </string>
<string name="setup_btn_connect">जुड़ें </string>
<string name="uploader_btn_upload_text">अपलोड </string>
<string name="uploader_btn_new_folder_text">नया फ़ोल्डर</string>
+ <string name="action_share">साझा करें</string>
<string name="common_cancel">रद्द करें </string>
<string name="common_error">त्रुटि</string>
<string name="ssl_validator_btn_details_see">विवरण </string>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Otvorite</string>
<string name="prefs_category_general">Općenito</string>
<string name="prefs_category_more">više</string>
<string name="prefs_accounts">Korisnićki računi</string>
<string name="file_list_seconds_ago">prije par sekundi</string>
<string name="file_list_empty">Nema ničega u ovoj mapi. Pošalji nešto!</string>
<string name="filedetails_download">Preuzimanje</string>
- <string name="action_share_file">Podijelite vezu</string>
+ <string name="action_share">Dijeljenje</string>
<string name="common_yes">Da</string>
<string name="common_no">Ne</string>
<string name="common_ok">U redu</string>
- <string name="common_cancel_upload">Prekini upload</string>
<string name="common_cancel">Odustani</string>
<string name="common_error">Greška</string>
<string name="common_error_unknown">Nepoznata pogreška</string>
<string name="folder_picker_choose_button_text">Odaberite</string>
<string name="prefs_category_security">Sigurnost</string>
<string name="auth_host_address">Adresa poslužitelja</string>
+ <string name="share_dialog_title">Dijeljenje zajedničkih resursa</string>
+ <string name="share_via_link_section_title">Podijelite vezu</string>
+ <string name="share_via_link_expiration_date_label">Odredite datum isteka</string>
+ <string name="share_via_link_password_label">Zaštititi lozinkom</string>
+ <string name="share_search">pretraži</string>
</resources>
<string name="actionbar_settings">Beállítások</string>
<string name="actionbar_see_details">Részletek</string>
<string name="actionbar_send_file">Küldjük el</string>
+ <string name="actionbar_sort">Rendezés</string>
+ <string name="actionbar_sort_title">Rendezés elve</string>
+ <string-array name="actionbar_sortby">
+ <item>A-Z</item>
+ <item>Újabb - régebbi</item>
+ </string-array>
<!--TODO re-enable when server-side folder size calculation is available
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Összes fájl</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
<string name="drawer_item_settings">Beállítások</string>
+ <string name="drawer_item_logs">Naplófájlok</string>
+ <string name="drawer_close">Bezárás</string>
+ <string name="drawer_open">Megnyitás</string>
<string name="prefs_category_general">Általános</string>
<string name="prefs_category_more">Több</string>
<string name="prefs_accounts">Fiókok</string>
<string name="prefs_recommend">Ajánlja egy barátjának</string>
<string name="prefs_feedback">Visszajelzés</string>
<string name="prefs_imprint">Impresszum</string>
+ <string name="prefs_remember_last_share_location">Emlékezzen a megosztás helyére</string>
<string name="recommend_subject">Próbálja ki %1$s-t az okostelefonján!</string>
<string name="auth_check_server">Szerver állapot ellenörzés</string>
<string name="auth_host_url">Kiszolgáló címe https://...</string>
<string name="uploader_info_uploading">Feltöltés</string>
<string name="file_list_seconds_ago">pár másodperce</string>
<string name="file_list_empty">Itt nincs semmi. Töltsön fel valamit!</string>
+ <string name="file_list_loading">Betöltés...</string>
<string name="local_file_list_empty">Nincs fájl ebben a mappában.</string>
<string name="filedetails_select_file">Érintsen meg egy fájlt a további információkért.</string>
<string name="filedetails_size">Méret:</string>
<string name="filedetails_created">Készült:</string>
<string name="filedetails_modified">Módosítva:</string>
<string name="filedetails_download">Letöltés</string>
- <string name="filedetails_sync_file">File frissítése</string>
+ <string name="filedetails_sync_file">Szinkronizálás</string>
<string name="filedetails_renamed_in_upload_msg">A feltöltés során az állmányt erre neveztük át: %1$s</string>
- <string name="action_share_file">Megosztás hivatkozással</string>
- <string name="action_unshare_file">Megosztás visszavonása</string>
+ <string name="list_layout">Lista Elrendezés</string>
+ <string name="action_share">Megosztás</string>
<string name="common_yes">Igen</string>
<string name="common_no">Nem</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">A letöltés megszakítása</string>
- <string name="common_cancel_upload">A feltöltés megszakítása</string>
+ <string name="common_cancel_sync">Szinkronizálás megállítása</string>
<string name="common_cancel">Mégsem</string>
<string name="common_save_exit">Mentés & Kilépés</string>
<string name="common_error">Hiba</string>
<string name="auth_no_net_conn_title">Nincs hálózati kapcsolat</string>
<string name="auth_nossl_plain_ok_title">Nem érhető el biztonságos kapcsolat.</string>
<string name="auth_connection_established">A kapcsolat létrejött</string>
+ <string name="auth_testing_connection">Kapcsolat ellenőrzése</string>
<string name="auth_not_configured_title">Hibás a kiszolgáló beállítása</string>
<string name="auth_account_not_new">Egy bejelentkezési beállítás már létezik ugyanehhez a kiszolgálóhoz és felhasználóhoz</string>
<string name="auth_account_not_the_same">A megadott felhasználó nem azonos ezzel a belépési jogosultsággal</string>
<string name="unfavorite">Nem kedvenc</string>
<string name="common_rename">Átnevezés</string>
<string name="common_remove">Eltávolítás</string>
- <string name="confirmation_remove_alert">Tényleg el akarod távolítani %1$s?</string>
+ <string name="confirmation_remove_file_alert">Tényleg el akarod távolítani %1$s?</string>
<string name="confirmation_remove_folder_alert">Tényleg el akarod távolítani a %1$s és tartalmát?</string>
<string name="confirmation_remove_local">Csak a helyi példány</string>
- <string name="confirmation_remove_folder_local">Csak a helyi tartalmat</string>
- <string name="confirmation_remove_remote">Törlés a szerverről</string>
- <string name="confirmation_remove_remote_and_local">A szerveren levő és a helyi példány törlése</string>
+ <string name="confirmation_remove_folder_local">Csak a helyi példány</string>
<string name="remove_success_msg">Az eltávolítás sikerült</string>
<string name="remove_fail_msg">Az eltávolítás nem sikerült</string>
<string name="rename_dialog_title">Adj meg egy új nevet</string>
<string name="sync_file_nothing_to_do_msg">Az állományok már szinkonizálva vannak</string>
<string name="create_dir_fail_msg">A könyvtárt nem lehet létrehozni</string>
<string name="filename_forbidden_characters">Nem megendedett karakterek: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">A fájlnév legalább egy érvénytelen karaktert tartalmaz!</string>
<string name="filename_empty">A fájl név nem lehet üres</string>
<string name="wait_a_moment">Egy pillanat...</string>
<string name="filedisplay_unexpected_bad_get_content">Váratlan hiba; válassza ki a fájlt más programból</string>
<string name="instant_video_upload_on_wifi">Videó feltöltés csak WIFI-vel</string>
<string name="instant_upload_path">/InstantUpload</string>
<string name="conflict_keep_both">Mindkettő megtartása</string>
+ <string name="conflict_use_local_version">helyi verzió</string>
+ <string name="conflict_use_server_version">szerver verzió</string>
<string name="preview_image_description">Előnézeti kép</string>
<string name="preview_image_error_unknown_format">Ez a kép nem jeleníthető meg</string>
<string name="error__upload__local_file_not_copied">%1$s nem lehet másolni a %2$s helyi könyvtárba</string>
+ <string name="prefs_instant_upload_path_title">Feltöltési Elérési Út</string>
<string name="share_link_file_error">Hiba lépett fel a mappa megosztásakor</string>
<string name="unshare_link_file_error">Hiba lépett fel a mappa megosztásának visszavonásakor</string>
+ <string name="share_link_password_title">Jelszó beírása</string>
<string name="activity_chooser_send_file_title">Küldjük el</string>
<string name="copy_link">Link másolása</string>
<string name="clipboard_text_copied">Bemásolva a vágólapra</string>
<string name="actionbar_move">Mozgatás</string>
<string name="folder_picker_choose_button_text">Válasszon</string>
<string name="prefs_category_security">Biztonság</string>
+ <string name="shared_subject_header">megosztva</string>
+ <string name="with_you_subject_header">veled</string>
<string name="auth_host_address">A kiszolgáló címe</string>
+ <string name="common_error_out_memory">Nincs elég memória</string>
+ <string name="username">Felhasználónév</string>
+ <string name="file_list__footer__folder">1 könyvtár</string>
+ <string name="file_list__footer__folders">%1$d könyvtár</string>
+ <string name="file_list__footer__file">1 fájl</string>
+ <string name="file_list__footer__file_and_folder">1 fájl, 1 könyvtár</string>
+ <string name="file_list__footer__file_and_folders">1 fájl, %1$d könyvtár</string>
+ <string name="file_list__footer__files">%1$d fájl</string>
+ <string name="file_list__footer__files_and_folder">%1$d fájl, 1 könyvtár</string>
+ <string name="file_list__footer__files_and_folders">%1$d fájl, %2$d könyvtár</string>
+ <string name="share_dialog_title">Megosztás</string>
+ <string name="share_via_link_section_title">Megosztás hivatkozással</string>
+ <string name="share_via_link_expiration_date_label">Legyen lejárati idő</string>
+ <string name="share_via_link_password_label">Jelszóval is védem</string>
+ <string name="share_search">Keresés</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
+ <string name="about_version">տարբերակ %1$s</string>
+ <string name="actionbar_upload_files">Ֆայլեր</string>
+ <string name="actionbar_mkdir">Նոր պանակ</string>
+ <string name="actionbar_send_file">Ուղարկել</string>
<!--TODO re-enable when server-side folder size calculation is available
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Բոլոր ֆայլերը</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_close">Փակել</string>
+ <string name="drawer_open">Բացել</string>
+ <string name="auth_username">Օգտանուն</string>
+ <string name="auth_password">Գաղտնաբառ</string>
+ <string name="sync_string_files">Ֆայլեր</string>
+ <string name="uploader_btn_new_folder_text">Նոր պանակ</string>
+ <string name="file_list_seconds_ago">վրկ. առաջ</string>
+ <string name="filedetails_size">Չափս.</string>
<string name="filedetails_download">Բեռնել</string>
+ <string name="action_share">Կիսվել</string>
+ <string name="common_yes">Այո</string>
+ <string name="common_no">Ոչ</string>
+ <string name="common_cancel">Չեղարկել</string>
+ <string name="common_error">Սխալ</string>
+ <string name="uploader_info_dirname">Պանակի անուն</string>
+ <string name="common_rename">Վերանվանել</string>
+ <string name="ssl_validator_label_C">Երկիր.</string>
+ <string name="ssl_validator_label_validity_from">Ումից.</string>
+ <string name="ssl_validator_label_validity_to">Ում.</string>
+ <string name="placeholder_filesize">389 ԿԲ</string>
+ <string name="activity_chooser_send_file_title">Ուղարկել</string>
<string name="empty"></string>
+ <string name="username">Օգտանուն</string>
+ <string name="file_list__footer__folder">1 պանակ</string>
+ <string name="file_list__footer__folders">%1$d պանակ</string>
+ <string name="file_list__footer__file">1 ֆայլ</string>
+ <string name="file_list__footer__file_and_folder">1 ֆայլ, 1 պանակ</string>
+ <string name="file_list__footer__file_and_folders">1 ֆայլ, %1$d պանակ</string>
+ <string name="file_list__footer__files">%1$d ֆայլ</string>
+ <string name="file_list__footer__files_and_folder">%1$d ֆայլ, 1 պանակ</string>
+ <string name="file_list__footer__files_and_folders">%1$d ֆայլ, %2$d պանակ</string>
+ <string name="share_via_link_section_title">Կիսվել հղմամբ</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Aperi</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Plus</string>
<string name="prefs_accounts">Contos</string>
<string name="filedetails_size">Dimension:</string>
<string name="filedetails_type">Typo:</string>
<string name="filedetails_download">Discargar</string>
- <string name="action_share_file">Compartir ligamine</string>
+ <string name="action_share">Compartir</string>
<string name="common_yes">Si</string>
<string name="common_no">No</string>
<string name="common_ok">Ok</string>
- <string name="common_cancel_download">Cancellar discarga</string>
<string name="common_cancel">Cancellar</string>
<string name="common_error">Error</string>
<string name="common_error_unknown">Error Incognite</string>
+ <string name="about_title">A proposito</string>
<string name="change_password">Cambiar contrasigno</string>
<string name="delete_account">Deler conto</string>
<string name="uploader_info_dirname">Nomine de dossier</string>
<string name="prefs_category_accounts">Contos</string>
<string name="saml_authentication_wrong_pass">Contrasigno errate</string>
<string name="folder_picker_choose_button_text">Seliger</string>
+ <string name="share_via_link_section_title">Compartir ligamine</string>
+ <string name="share_via_link_expiration_date_label">Fixa data de expiration</string>
+ <string name="share_via_link_password_label">Protegite per contrasigno</string>
+ <string name="share_search">Cercar</string>
</resources>
<string name="about_version">versi %1$s</string>
<string name="actionbar_sync">Segarkan akun</string>
<string name="actionbar_upload">Unggah</string>
- <string name="actionbar_upload_from_apps">Konten dari apl lain</string>
+ <string name="actionbar_upload_from_apps">Konten dari aplikasi lain</string>
<string name="actionbar_upload_files">Berkas</string>
<string name="actionbar_open_with">Buka dengan</string>
<string name="actionbar_mkdir">Folder baru</string>
<string name="drawer_item_settings">Pengaturan</string>
<string name="drawer_item_logs">Log</string>
<string name="drawer_close">Tutup</string>
+ <string name="drawer_open">Buka</string>
<string name="prefs_category_general">Umum</string>
<string name="prefs_category_more">Lainnya</string>
<string name="prefs_accounts">Akun</string>
<string name="file_list_seconds_ago">beberapa detik yang lalu</string>
<string name="file_list_empty">Tidak ada apa-apa di sini. Unggah sesuatu!</string>
<string name="file_list_loading">Memuat...</string>
+ <string name="file_list_no_app_for_file_type">Aplikasi tidak ditemukan untuk tipe berkas ini!</string>
<string name="local_file_list_empty">Tidak ada satupun berkas dalam folder ini.</string>
<string name="filedetails_select_file">Sentuh pada berkas untuk menampilkan informasi tambahan</string>
<string name="filedetails_size">Ukuran:</string>
<string name="filedetails_created">Dibuat:</string>
<string name="filedetails_modified">Diubah:</string>
<string name="filedetails_download">Unduh</string>
- <string name="filedetails_sync_file">Segarkan berkas</string>
<string name="filedetails_renamed_in_upload_msg">Berkas diubah namanya menjadi %1$s saat pengunggahan</string>
<string name="list_layout">Daftar Tata Letak</string>
- <string name="action_share_file">Bagikan tautan</string>
- <string name="action_unshare_file">Batal bagikan tautan</string>
+ <string name="action_share">Bagikan</string>
<string name="common_yes">Ya</string>
<string name="common_no">Tidak</string>
<string name="common_ok">Oke</string>
- <string name="common_cancel_download">Batal mengunduh</string>
- <string name="common_cancel_upload">Batal mengunggah</string>
<string name="common_cancel">Batal</string>
<string name="common_save_exit">Simpan & Keluar</string>
<string name="common_error">Kesalahan</string>
<string name="common_loading">Memuat ...</string>
- <string name="common_error_unknown">Galat tidak diketahui</string>
+ <string name="common_error_unknown">Kesalahan tidak diketahui</string>
<string name="about_title">Tentang</string>
<string name="change_password">Ubah sandi</string>
<string name="delete_account">Hapus akun</string>
<string name="foreign_files_success">Semua berkas sudah dipindahkan</string>
<string name="foreign_files_fail">Beberapa berkas tidak dapat dipindahkan</string>
<string name="foreign_files_local_text">Lokal: %1$s</string>
- <string name="foreign_files_remote_text">Jauh: %1$s</string>
+ <string name="foreign_files_remote_text">Remote: %1$s</string>
<string name="upload_query_move_foreign_files">Ruang tidak cukup untuk menyalin berkas terpilih kedalam folder %1$s. Apakah Anda ingin memindahkannya saja?</string>
<string name="pass_code_enter_pass_code">Silakan masukkan kode sandi Anda</string>
<string name="pass_code_configure_your_pass_code">Masukkan kode sandi Anda</string>
<string name="media_event_done">%1$s pemutaran selesai</string>
<string name="media_err_nothing_to_play">Tidak ditemukan berkas media</string>
<string name="media_err_no_account">Tidak ada akun yang diberikan</string>
- <string name="media_err_not_in_owncloud">Brkas tidak didalam akun yang sah</string>
+ <string name="media_err_not_in_owncloud">Berkas tidak didalam akun yang sah</string>
<string name="media_err_unsupported">Kodek media tidak didukung</string>
<string name="media_err_io">Berkas media tidak dapat dibaca</string>
<string name="media_err_malformed">Berkas media tidak di enkode dengan benar</string>
<string name="unfavorite">Hapus favorit</string>
<string name="common_rename">Ubah nama</string>
<string name="common_remove">Hapus</string>
- <string name="confirmation_remove_alert">Apakah Anda yakin ingin menghapus %1$s?</string>
+ <string name="confirmation_remove_file_alert">Apakah Anda yakin ingin menghapus %1$s?</string>
<string name="confirmation_remove_folder_alert">Apakah Anda yakin ingin menghapus %1$s dan isinya?</string>
<string name="confirmation_remove_local">Lokal saja</string>
- <string name="confirmation_remove_folder_local">Konten lokal saja</string>
- <string name="confirmation_remove_remote">Hapus dari server</string>
- <string name="confirmation_remove_remote_and_local">Jarak jauh dan lokal</string>
+ <string name="confirmation_remove_folder_local">Lokal saja</string>
+ <string name="confirmation_remove_file_remote">Dari server</string>
+ <string name="confirmation_remove_remote_and_local">Remot & lokal</string>
<string name="remove_success_msg">Penghapusan berhasil</string>
<string name="remove_fail_msg">Penghapusan gagal</string>
<string name="rename_dialog_title">Masukkan nama baru</string>
<string name="instant_upload_on_wifi">Hanya unggah gambar via WiFi</string>
<string name="instant_video_upload_on_wifi">Hanya unggah video via WiFi</string>
<string name="instant_upload_path">/UnggahInstan</string>
+ <string name="conflict_title">Berkas konflik</string>
+ <string name="conflict_message">Berkas mana yang ingin Anda simpan? Jika Anda memilih kedua versi, berkas lokal akan memiliki angka yang ditambahkan pada namanya.</string>
<string name="conflict_keep_both">Biarkan keduannya</string>
+ <string name="conflict_use_local_version">versi lokal</string>
+ <string name="conflict_use_server_version">versi server</string>
<string name="preview_image_description">Pratilik gambar</string>
<string name="preview_image_error_unknown_format">Gambar ini tidak dapat ditampilkan</string>
<string name="error__upload__local_file_not_copied">%1$s tidak dapat disalin ke folder lokal %2$s</string>
<string name="downloader_download_file_not_found">Berkas tidak lagi tersedia pada server</string>
<string name="prefs_category_accounts">Akun</string>
<string name="prefs_add_account">Tambah akun</string>
- <string name="auth_redirect_non_secure_connection_title">Sambungan aman dialihkan ke rute yang tidak aman.</string>
+ <string name="auth_redirect_non_secure_connection_title">Sambungan aman dialihkan melalui rute yang tidak aman.</string>
<string name="actionbar_logger">Log</string>
<string name="log_send_history_button">Kirim Riwayat</string>
<string name="log_send_no_mail_app">Tidak ada apl untuk mengirim log. Instal apl mail!</string>
<string name="move_file_invalid_overwrite">Berkas sudah ada didalam folder tujuan</string>
<string name="move_file_error">Terjadi kesalahan saat mencoba memindahkan berkas atau folder ini</string>
<string name="forbidden_permissions_move">untuk memindahkan berkas ini</string>
+ <string name="copy_file_not_found">Tidak dapat menyalin. Silakan periksa apakah berkas ada</string>
+ <string name="copy_file_invalid_into_descendent">Tidak mungkin menyalin folder kedalam turunannya</string>
+ <string name="copy_file_invalid_overwrite">Berkas sudah ada didalam folder tujuan</string>
+ <string name="copy_file_error">Terjadi kesalahan ketika mencoba menyalin berkas atau folder ini</string>
+ <string name="forbidden_permissions_copy">untuk menyalin berkas ini</string>
<string name="prefs_category_instant_uploading">Unggah Cepat</string>
<string name="prefs_category_security">Keamanan</string>
<string name="prefs_instant_video_upload_path_title">Unggah Lokasi Video</string>
- <string name="download_folder_failed_content">Mengunduh folder %1$s tidak selesai</string>
<string name="shared_subject_header">dibagikan</string>
<string name="with_you_subject_header">kepada Anda</string>
- <string name="subject_token">%1$s dibagikan \"%2$s\" kepada Anda</string>
+ <string name="subject_user_shared_with_you">%1$s dibagikan \"%2$s\" kepada Anda</string>
+ <string name="subject_shared_with_you">\"%1$s\" telah membagikan dengan Anda</string>
<string name="auth_refresh_button">Menyegarkan sambungan</string>
<string name="auth_host_address">Alamat server</string>
<string name="common_error_out_memory">Memori tidak cukup</string>
<string name="file_list__footer__files">%1$d berkas</string>
<string name="file_list__footer__files_and_folder">%1$d berkas, 1 folder</string>
<string name="file_list__footer__files_and_folders">%1$d berkas, %2$d folder</string>
+ <string name="share_dialog_title">Berbagi</string>
+ <string name="share_no_users">Tidak ada data yang dibagikan dengan pengguna</string>
+ <string name="share_add_user_or_group">Tambah Pengguna atau Grup</string>
+ <string name="share_via_link_section_title">Bagikan tautan</string>
+ <string name="share_via_link_expiration_date_label">Atur tanggal kedaluwarsa</string>
+ <string name="share_via_link_password_label">Lindungi dengan sandi</string>
+ <string name="share_search">Cari</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Opna</string>
<string name="prefs_category_more">Meira</string>
<string name="prefs_help">Hjálp</string>
<string name="auth_username">Notendanafn</string>
<string name="file_list_seconds_ago">sek.</string>
<string name="file_list_empty">Ekkert hér. Settu eitthvað inn!</string>
<string name="filedetails_download">Niðurhal</string>
+ <string name="action_share">Deila</string>
<string name="common_yes">Já</string>
<string name="common_no">Nei</string>
<string name="common_ok">Í lagi</string>
- <string name="common_cancel_upload">Hætta við innsendingu</string>
<string name="common_cancel">Hætta við</string>
<string name="common_error"><strong>Villa</strong></string>
<string name="change_password">Breyta lykilorði</string>
<string name="common_remove">Fjarlægja</string>
<string name="activity_chooser_send_file_title">Senda</string>
<string name="empty"></string>
+ <string name="actionbar_move">Færa</string>
<string name="folder_picker_choose_button_text">Veldu</string>
<string name="auth_host_address">Host nafn netþjóns</string>
+ <string name="share_via_link_section_title">Deila hlekk</string>
+ <string name="share_via_link_expiration_date_label">Setja gildistíma</string>
+ <string name="share_via_link_password_label">Verja með lykilorði</string>
+ <string name="share_search">Leita</string>
</resources>
<string name="drawer_item_settings">Impostazioni</string>
<string name="drawer_item_logs">Registri</string>
<string name="drawer_close">Chiudi</string>
+ <string name="drawer_open">Apri</string>
<string name="prefs_category_general">Generale</string>
<string name="prefs_category_more">Altro</string>
<string name="prefs_accounts">Account</string>
<string name="file_list_seconds_ago">secondi fa</string>
<string name="file_list_empty">Non c\'è niente qui. Carica qualcosa!</string>
<string name="file_list_loading">Caricamento in corso...</string>
+ <string name="file_list_no_app_for_file_type">Nessuna applicazione trovata per il tipo di file.</string>
<string name="local_file_list_empty">Non ci sono file in questa cartella.</string>
<string name="filedetails_select_file">Tocca un file per visualizzare informazioni aggiuntive.</string>
<string name="filedetails_size">Dimensione:</string>
<string name="filedetails_created">Creato:</string>
<string name="filedetails_modified">Modificato:</string>
<string name="filedetails_download">Scarica</string>
- <string name="filedetails_sync_file">Aggiorna file</string>
+ <string name="filedetails_sync_file">Sincronizza</string>
<string name="filedetails_renamed_in_upload_msg">Il file è stato rinominato in %1$s durante il caricamento</string>
<string name="list_layout">Struttura elenco</string>
- <string name="action_share_file">Condividi collegamento</string>
- <string name="action_unshare_file">Rimuovi condivisione collegamento</string>
+ <string name="action_share">Condividi</string>
<string name="common_yes">Sì</string>
<string name="common_no">No</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Annulla lo scaricamento</string>
- <string name="common_cancel_upload">Annulla caricamento</string>
+ <string name="common_cancel_sync">Annulla sincronizzazione</string>
<string name="common_cancel">Annulla</string>
<string name="common_save_exit">Salva ed esci</string>
<string name="common_error">Errore</string>
<string name="unfavorite">Rimuovi dai preferiti</string>
<string name="common_rename">Rinomina</string>
<string name="common_remove">Rimuovi</string>
- <string name="confirmation_remove_alert">Vuoi davvero rimuovere %1$s?</string>
+ <string name="confirmation_remove_file_alert">Vuoi davvero rimuovere %1$s?</string>
<string name="confirmation_remove_folder_alert">Vuoi davvero rimuovere %1$s e il suo contenuto?</string>
<string name="confirmation_remove_local">Solo localmente</string>
- <string name="confirmation_remove_folder_local">Solo contenuti locali</string>
- <string name="confirmation_remove_remote">Rimuovi dal server</string>
- <string name="confirmation_remove_remote_and_local">Sia remoto che locale</string>
+ <string name="confirmation_remove_folder_local">Solo locale</string>
+ <string name="confirmation_remove_file_remote">Dal server</string>
+ <string name="confirmation_remove_remote_and_local">Remota e locale</string>
<string name="remove_success_msg">Rimozione effettuata con successo</string>
<string name="remove_fail_msg">La rimozione non può essere completata</string>
<string name="rename_dialog_title">Digita un nuovo nome</string>
<string name="ssl_validator_label_validity_to">A:</string>
<string name="ssl_validator_label_signature">Firma:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
+ <string name="digest_algorithm_not_available">Questo algoritmo digest non è disponibile sul tuo telefono.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Impronta digitale:</string>
+ <string name="certificate_load_problem">Si è verificato un problema durante il caricamento del certificato.</string>
<string name="ssl_validator_null_cert">Il certificato non può essere mostrato.</string>
<string name="ssl_validator_no_info_about_error">- Nessuna informazione sull\'errore</string>
<string name="placeholder_sentence">Questo è un segnaposto</string>
<string name="conflict_title">File in conflitto</string>
<string name="conflict_message">Quali file vuoi tenere? Se selezioni entrambi le versioni, il file locale avrà un numero aggiunto al suo nome.</string>
<string name="conflict_keep_both">Mantieni entrambi</string>
- <string name="conflict_use_local_version">Usa la versione locale</string>
- <string name="conflict_use_server_version">Usa la versione del server</string>
+ <string name="conflict_use_local_version">Versione locale</string>
+ <string name="conflict_use_server_version">versione del server</string>
<string name="preview_image_description">Anteprima dell\'immagine</string>
<string name="preview_image_error_unknown_format">Questa immagine non può essere mostrata</string>
<string name="error__upload__local_file_not_copied">%1$s non può essere copiato nella cartella locale %2$s</string>
<string name="share_link_file_error">Si è verificato un errore durante il tentativo di condivisione del file o della cartella</string>
<string name="unshare_link_file_no_exist">Impossibile rimuovere dalla condivisione. Assicurati che il file esista</string>
<string name="unshare_link_file_error">Si è verificato un errore durante il tentativo di rimuovere la condivisione del file o della cartella</string>
+ <string name="update_link_file_no_exist">Impossibile aggiornare. Assicurati che il file esista</string>
+ <string name="update_link_file_error">Si è verificato un errore durante il tentativo di aggiornare il collegamento condiviso</string>
<string name="share_link_password_title">Digita una password</string>
<string name="share_link_empty_password">Devi digitare una password</string>
<string name="activity_chooser_send_file_title">Invia</string>
<string name="forbidden_permissions_delete">per eliminare questo file</string>
<string name="share_link_forbidden_permissions">per condividere questo file</string>
<string name="unshare_link_forbidden_permissions">per rimuovere la condivisione di questo file</string>
+ <string name="update_link_forbidden_permissions">per aggiornare questo collegamento condiviso</string>
<string name="forbidden_permissions_create">per creare il file</string>
<string name="uploader_upload_forbidden_permissions">per caricare in questa cartella</string>
<string name="downloader_download_file_not_found">Il file non è più disponibile sul server</string>
<string name="prefs_category_accounts">Account</string>
<string name="prefs_add_account">Aggiungi account</string>
- <string name="auth_redirect_non_secure_connection_title">La connessione sicura è rediretta su un percorso non sicuro.</string>
+ <string name="auth_redirect_non_secure_connection_title">La connessione sicura è rediretta attraverso un percorso non sicuro.</string>
<string name="actionbar_logger">Registri</string>
<string name="log_send_history_button">Invia cronologia</string>
<string name="log_send_no_mail_app">Non è stata trovata alcuna applicazione per l\'invio dei registri. Installa l\'applicazione mail!</string>
<string name="move_file_invalid_overwrite">Il file esiste già nella cartella di destinazione</string>
<string name="move_file_error">Si è verificato un errore durante il tentativo di spostare il file o la cartella</string>
<string name="forbidden_permissions_move">per spostare questo file</string>
+ <string name="copy_file_not_found">Impossibile copiare. Assicurati che il file esista</string>
+ <string name="copy_file_invalid_into_descendent">Impossibile copiare una cartella in una cartella inferiore</string>
+ <string name="copy_file_invalid_overwrite">Il file esiste già nella cartella di destinazione</string>
+ <string name="copy_file_error">Si è verificato un errore durante il tentativo di copiare il file o la cartella</string>
+ <string name="forbidden_permissions_copy">per copiare questo file</string>
<string name="prefs_category_instant_uploading">Caricamenti istantanei</string>
<string name="prefs_category_security">Protezione</string>
<string name="prefs_instant_video_upload_path_title">Percorso di caricamento video</string>
- <string name="download_folder_failed_content">Lo scaricamento della cartella %1$s non può essere completato</string>
+ <string name="sync_folder_failed_content">La sincronizzazione della cartella %1$s non può essere completata</string>
<string name="shared_subject_header">condiviso</string>
<string name="with_you_subject_header">con te</string>
- <string name="subject_token">%1$s ha condiviso \"%2$s\" con te</string>
- <string name="saml_subject_token">\"%1$s\" è stato condiviso con te</string>
+ <string name="subject_user_shared_with_you">%1$s ha condiviso \"%2$s\" con te</string>
+ <string name="subject_shared_with_you">\"%1$s\" è stato condiviso con te</string>
<string name="auth_refresh_button">Aggiorna la connessione</string>
<string name="auth_host_address">Indirizzo del server</string>
<string name="common_error_out_memory">Memoria insufficiente</string>
<string name="file_list__footer__files">%1$d file</string>
<string name="file_list__footer__files_and_folder">%1$d file, 1 cartella</string>
<string name="file_list__footer__files_and_folders">%1$d file, %2$d cartelle</string>
+ <string name="share_dialog_title">Condivisione</string>
+ <string name="share_with_user_section_title">Condividi con utenti e gruppi</string>
+ <string name="share_no_users">Ancora nessun dato condiviso con gli utenti </string>
+ <string name="share_add_user_or_group">Aggiungi utente o gruppo</string>
+ <string name="share_via_link_section_title">Condividi collegamento</string>
+ <string name="share_via_link_expiration_date_label">Imposta data di scadenza</string>
+ <string name="share_via_link_password_label">Proteggi con password</string>
+ <string name="share_via_link_password_title">Protetto</string>
+ <string name="share_get_public_link_button">Ottieni collegamento</string>
+ <string name="share_search">Cerca</string>
+ <string name="search_users_and_groups_hint">Cerca utenti e gruppi</string>
+ <string name="share_group_clarification">%1$s (gruppo)</string>
+ <string name="share_sharee_unavailable">Spiacenti, la versione del tuo server non consente la condivisione con utenti dai client.
+\nContatta il tuo amministratore.</string>
</resources>
<string name="drawer_item_settings">設定</string>
<string name="drawer_item_logs">ログ</string>
<string name="drawer_close">閉じる</string>
+ <string name="drawer_open">開く</string>
<string name="prefs_category_general">一般</string>
<string name="prefs_category_more">もっと見る</string>
<string name="prefs_accounts">アカウント</string>
<string name="file_list_seconds_ago">数秒前</string>
<string name="file_list_empty">ここには何もありません。何かアップロードしてください。</string>
<string name="file_list_loading">読込中...</string>
+ <string name="file_list_no_app_for_file_type">この種類のファイルに対応するアプリはありません!</string>
<string name="local_file_list_empty">このフォルダーにはファイルがありません。</string>
<string name="filedetails_select_file">ファイルをタップすると追加情報が表示されます。</string>
<string name="filedetails_size">サイズ:</string>
<string name="filedetails_sync_file">ファイルを同期</string>
<string name="filedetails_renamed_in_upload_msg">アップロード中にファイル名を %1$s に変更しました</string>
<string name="list_layout">リストレイアウト</string>
- <string name="action_share_file">URLで共有</string>
- <string name="action_unshare_file">未共有のリンク</string>
+ <string name="action_share">共有</string>
<string name="common_yes">はい</string>
<string name="common_no">いいえ</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">ダウンロードをキャンセル</string>
- <string name="common_cancel_upload">アップロードをキャンセル</string>
+ <string name="common_cancel_sync">同期をキャンセル</string>
<string name="common_cancel">キャンセル</string>
<string name="common_save_exit">保存して終了</string>
<string name="common_error">エラー</string>
<string name="unfavorite">お気に入りを解除</string>
<string name="common_rename">名前を変更</string>
<string name="common_remove">削除</string>
- <string name="confirmation_remove_alert">本当に %1$s を削除しますか?</string>
+ <string name="confirmation_remove_file_alert">本当に %1$s を削除しますか?</string>
<string name="confirmation_remove_folder_alert">本当に %1$s およびそのコンテンツを削除してもよろしいですか?</string>
<string name="confirmation_remove_local">ローカルのみ</string>
- <string name="confirmation_remove_folder_local">ã\83ã\83¼ã\82«ã\83«ã\82³ã\83³ã\83\86ã\83³ã\83\84ã\81®ã\81¿</string>
- <string name="confirmation_remove_remote">サーバーから削除</string>
+ <string name="confirmation_remove_folder_local">ローカルのみ</string>
+ <string name="confirmation_remove_remote">サーバーから</string>
<string name="confirmation_remove_remote_and_local">リモートとローカルの両方</string>
<string name="remove_success_msg">削除に成功しました</string>
<string name="remove_fail_msg">削除を完了できませんでした</string>
<string name="ssl_validator_label_validity_to">先:</string>
<string name="ssl_validator_label_signature">署名:</string>
<string name="ssl_validator_label_signature_algorithm">アルゴリズム:</string>
+ <string name="digest_algorithm_not_available">このスマートフォンでは、ダイジェストアルゴリズムが利用できません。</string>
+ <string name="ssl_validator_label_certificate_fingerprint">フィンガープリント:</string>
+ <string name="certificate_load_problem">証明書の読み込みに問題がありました。</string>
<string name="ssl_validator_null_cert">証明書が表示できません。</string>
<string name="ssl_validator_no_info_about_error">-エラーについての詳細情報はありません</string>
<string name="placeholder_sentence">これはプレースホルダです</string>
<string name="instant_upload_on_wifi">WiFi経由でのみ画像をアップロード</string>
<string name="instant_video_upload_on_wifi">WiFi経由でのみ動画をアップロード</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">ファイルが競合</string>
+ <string name="conflict_message">どちらのファイルを保存したいですか?両方のバージョンを選択した場合は、ファイル名の後ろに数字を追加したファイルのコピーを作成します。</string>
<string name="conflict_keep_both">両方を保持</string>
+ <string name="conflict_use_local_version">ローカルのもの</string>
+ <string name="conflict_use_server_version">サーバーのもの</string>
<string name="preview_image_description">イメージプレビュー</string>
<string name="preview_image_error_unknown_format">この画像は表示できません</string>
<string name="error__upload__local_file_not_copied">%1$s は、ローカルフォルダー %2$s にコピーできませんでした。</string>
<string name="share_link_file_error">このファイルまたはフォルダーを共有する際にエラーが発生しました</string>
<string name="unshare_link_file_no_exist">共有を解除できません。ファイルがあるか確認してください。</string>
<string name="unshare_link_file_error">このファイルまたはフォルダーの共有を解除する際にエラーが発生しました</string>
+ <string name="update_link_file_no_exist">更新できません。ファイルがあるか確認してください。</string>
+ <string name="update_link_file_error">共有リンクを更新する際にエラーが発生しました</string>
<string name="share_link_password_title">パスワードを入力</string>
<string name="share_link_empty_password">パスワードを入力しなければなりません</string>
<string name="activity_chooser_send_file_title">送信</string>
<string name="forbidden_permissions_delete">ファイルを削除</string>
<string name="share_link_forbidden_permissions">ファイルを共有</string>
<string name="unshare_link_forbidden_permissions">ファイルの共有を解除</string>
+ <string name="update_link_forbidden_permissions">この共有リンクを更新</string>
<string name="forbidden_permissions_create">ファイルを作成</string>
<string name="uploader_upload_forbidden_permissions">フォルダーをアップロード</string>
<string name="downloader_download_file_not_found">ファイルはサーバー上で利用できません</string>
<string name="prefs_category_accounts">アカウント</string>
<string name="prefs_add_account">アカウントを追加</string>
- <string name="auth_redirect_non_secure_connection_title">暗号化接続は非暗号化接続にリダイレクトされました。</string>
+ <string name="auth_redirect_non_secure_connection_title">暗号化されていない接続を経て、暗号化接続へリダイレクトされました。</string>
<string name="actionbar_logger">ログ</string>
<string name="log_send_history_button">ログを送信</string>
<string name="log_send_no_mail_app">ログを送信するアプリが見つかりませんでした。メールアプリをインストールしてください。</string>
<string name="move_file_invalid_overwrite">そのファイルは宛先フォルダーにすでに存在します。</string>
<string name="move_file_error">このファイルまたはフォルダーを移動する際にエラーが発生しました</string>
<string name="forbidden_permissions_move">このファイルを移動</string>
+ <string name="copy_file_not_found">コピーできません。ファイルがあるか確認してください。</string>
+ <string name="copy_file_invalid_into_descendent">フォルダーを子フォルダーへコピーすることはできません。</string>
+ <string name="copy_file_invalid_overwrite">そのファイルは宛先フォルダーにすでに存在します。</string>
+ <string name="copy_file_error">このファイルまたはフォルダーをコピーする際にエラーが発生しました</string>
+ <string name="forbidden_permissions_copy">このファイルをコピー</string>
<string name="prefs_category_instant_uploading">自動アップロード</string>
<string name="prefs_category_security">セキュリティ</string>
<string name="prefs_instant_video_upload_path_title">動画のアップロードパス</string>
- <string name="download_folder_failed_content">%1$s フォルダーのダウンロードが完了しませんでした</string>
+ <string name="sync_folder_failed_content">%1$s フォルダーの同期が完了しませんでした。</string>
<string name="shared_subject_header">共有中</string>
<string name="with_you_subject_header">あなたと</string>
- <string name="subject_token">%1$s は \"%2$s\" をあなたと共有しました</string>
+ <string name="subject_user_shared_with_you">%1$s は \"%2$s\" をあなたと共有しました</string>
+ <string name="subject_shared_with_you">\"%1$s\" があなたと共有しました</string>
<string name="auth_refresh_button">再接続中</string>
<string name="auth_host_address">サーバーアドレス</string>
<string name="common_error_out_memory">十分なメモリがありません</string>
<string name="file_list__footer__files">%1$d ファイル</string>
<string name="file_list__footer__files_and_folder">%1$d ファイル、1 フォルダー</string>
<string name="file_list__footer__files_and_folders">%1$d ファイル、%2$d フォルダー</string>
+ <string name="share_dialog_title">共有</string>
+ <string name="share_with_user_section_title">ユーザーとグループで共有</string>
+ <string name="share_no_users">ユーザーと共有されているデータはありません</string>
+ <string name="share_add_user_or_group">ユーザーまたはグループを追加</string>
+ <string name="share_via_link_section_title">URLで共有</string>
+ <string name="share_via_link_expiration_date_label">有効期限を設定</string>
+ <string name="share_via_link_password_label">パスワード保護を有効化</string>
+ <string name="share_via_link_password_title">セキュア</string>
+ <string name="share_get_public_link_button">リンクを取得</string>
+ <string name="share_search">検索</string>
+ <string name="search_users_and_groups_hint">ユーザーとグループを検索</string>
+ <string name="share_group_clarification">%1$s (グループ)</string>
+ <string name="share_sharee_unavailable">申し訳ありませんが、このサーバーのバージョンではこのクライアントアプリ上で他のユーザーと共有することができません。
+ \n管理者に相談してしてください。</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">გახსნა</string>
<string name="prefs_category_general">ზოგადი</string>
<string name="prefs_category_more">უფრო მეტი</string>
<string name="prefs_accounts">ანგარიში</string>
<string name="filedetails_modified">მოდიფიცირებულია:</string>
<string name="filedetails_download">ჩამოტვირთვა</string>
<string name="filedetails_renamed_in_upload_msg">ფაილ %1$s–ზე გადარქმეულ იქნა სახელი ატვირთვის დროს</string>
+ <string name="action_share">გაზიარება</string>
<string name="common_yes">კი</string>
<string name="common_no">არა</string>
<string name="common_ok">დიახ</string>
- <string name="common_cancel_download">ჩამოტვირთვის შეჩერება</string>
- <string name="common_cancel_upload">ატვირთვის გაუქმება</string>
<string name="common_cancel">გაუქმება</string>
<string name="common_save_exit">შენახვა &გამოსვლა</string>
<string name="common_error">შეცდომა</string>
<string name="common_rename">გადარქმევა</string>
<string name="common_remove">წაშლა</string>
<string name="confirmation_remove_local">მხოლოდ ლოკალური</string>
- <string name="confirmation_remove_folder_local">მხოლოდ ლოკალური კონტენტი</string>
- <string name="confirmation_remove_remote">სერვერიდან წაშლა</string>
- <string name="confirmation_remove_remote_and_local">დაშორებული და ლოკალური</string>
+ <string name="confirmation_remove_folder_local">მხოლოდ ლოკალური</string>
<string name="remove_success_msg">წაშლა შარმატებით დასრულდა</string>
<string name="remove_fail_msg">წაშლა წარუმატებლად დამთავრდა</string>
<string name="rename_dialog_title">შეიყვანეთ ახალი სახელი</string>
<string name="folder_picker_choose_button_text">არჩევა</string>
<string name="prefs_category_security">უსაფრთხოება</string>
<string name="auth_host_address">სერვერის მისამართი</string>
+ <string name="share_dialog_title">გაზიარება</string>
+ <string name="share_via_link_expiration_date_label">მიუთითე ვადის გასვლის დრო</string>
+ <string name="share_via_link_password_label">პაროლით დაცვა</string>
+ <string name="share_search">ძებნა</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">បើក</string>
<string name="prefs_category_general">ទូទៅ</string>
<string name="prefs_category_more">ច្រើនទៀត</string>
<string name="prefs_accounts">គណនី</string>
<string name="filedetails_created">បានបង្កើត៖</string>
<string name="filedetails_modified">បានកែសម្រួល៖</string>
<string name="filedetails_download">ទាញយក</string>
+ <string name="action_share">ចែករំលែក</string>
<string name="common_yes">ព្រម</string>
<string name="common_no">ទេ</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">បោះបង់ការទាញយក</string>
- <string name="common_cancel_upload">បោះបង់ការផ្ទុកឡើង</string>
<string name="common_cancel">លើកលែង</string>
<string name="common_save_exit">រក្សាទុក & ចាកចេញ</string>
<string name="common_error">កំហុស</string>
<string name="common_rename">ប្ដូរឈ្មោះ</string>
<string name="common_remove">ដកចេញ</string>
<string name="confirmation_remove_local">ទីកន្លែងតែមួយ</string>
- <string name="confirmation_remove_remote">ដកចេញពីសឺវឺ</string>
- <string name="confirmation_remove_remote_and_local">បញ្ជារ និងទីតាំង</string>
+ <string name="confirmation_remove_folder_local">ទីកន្លែងតែមួយ</string>
<string name="remove_success_msg">ការដកយកចេញបានជោគជ័យ</string>
<string name="remove_fail_msg">ការដកយកចេញបានបរាជ័យ</string>
<string name="rename_dialog_title">បញ្ចូលឈ្មោះថ្មី</string>
<string name="folder_picker_choose_button_text">ជ្រើស</string>
<string name="prefs_category_security">សុវត្ថិភាព</string>
<string name="auth_host_address">អាសយដ្ឋានម៉ាស៊ីនបម្រើ</string>
+ <string name="share_dialog_title">ការចែករំលែក</string>
+ <string name="share_via_link_expiration_date_label">កំណត់ពេលផុតកំណត់</string>
+ <string name="share_via_link_password_label">ការពារដោយពាក្យសម្ងាត់</string>
+ <string name="share_search">ស្វែងរក</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">ತೆರೆ</string>
<string name="prefs_category_more">ಇನ್ನಷ್ಟು</string>
<string name="prefs_help">ಸಹಾಯ</string>
<string name="prefs_imprint">ಮುದ್ರೆ</string>
<string name="uploader_btn_upload_text">ಪೇರಿಸು</string>
<string name="uploader_btn_new_folder_text">ಹೊಸ ಕಡತಕೋಶ</string>
<string name="filedetails_download">ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ</string>
- <string name="action_share_file">ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು</string>
+ <string name="action_share">ಹಂಚಿಕೊಳ್ಳಿ</string>
<string name="common_yes">ಹೌದು</string>
<string name="common_no">ಇಲ್ಲ</string>
<string name="common_ok">ಸರಿ</string>
- <string name="common_cancel_upload">ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ</string>
<string name="common_cancel">ರದ್ದು</string>
<string name="common_error">ತಪ್ಪಾಗಿದೆ</string>
<string name="common_error_unknown">ಗೊತ್ತಿಲ್ಲದ ದೋಷ</string>
<string name="folder_picker_choose_button_text">ಆಯ್ಕೆ</string>
<string name="prefs_category_security">ಭದ್ರತೆ</string>
<string name="auth_host_address">ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರದ ವಿಳಾಸ</string>
+ <string name="share_dialog_title">ಹಂಚಿಕೆ</string>
+ <string name="share_via_link_section_title">ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು</string>
+ <string name="share_via_link_expiration_date_label">ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ</string>
+ <string name="share_via_link_password_label">ಗುಪ್ತಪದ ರಕ್ಷಿಸಿಕೂಳ್ಲಿ</string>
+ <string name="share_search">ಹುಡುಕು</string>
</resources>
<string name="drawer_item_settings">설정</string>
<string name="drawer_item_logs">로그</string>
<string name="drawer_close">닫기</string>
+ <string name="drawer_open">열기</string>
<string name="prefs_category_general">일반</string>
<string name="prefs_category_more">더 보기</string>
<string name="prefs_accounts">계정</string>
<string name="file_list_seconds_ago">초 지남</string>
<string name="file_list_empty">내용이 없습니다. 업로드할 수 있습니다!</string>
<string name="file_list_loading">불러오는 중...</string>
+ <string name="file_list_no_app_for_file_type">파일 형식을 열 수 있는 앱이 없습니다!</string>
<string name="local_file_list_empty">이 폴더에 파일이 없습니다.</string>
<string name="filedetails_select_file">파일을 누르면 추가 정보가 표시됩니다.</string>
<string name="filedetails_size">크기:</string>
<string name="filedetails_created">만든 날짜:</string>
<string name="filedetails_modified">수정한 날짜:</string>
<string name="filedetails_download">다운로드</string>
- <string name="filedetails_sync_file">파일 새로 고침</string>
<string name="filedetails_renamed_in_upload_msg">업로드 중 파일 이름을 %1$s(으)로 변경하였습니다</string>
<string name="list_layout">목록 레이아웃</string>
- <string name="action_share_file">링크 공유</string>
- <string name="action_unshare_file">링크 공유 해제</string>
+ <string name="action_share">공유</string>
<string name="common_yes">예</string>
<string name="common_no">아니요</string>
<string name="common_ok">확인</string>
- <string name="common_cancel_download">다운로드 취소</string>
- <string name="common_cancel_upload">업로드 취소</string>
<string name="common_cancel">취소</string>
<string name="common_save_exit">저장하고 끝내기</string>
<string name="common_error">오류</string>
<string name="unfavorite">책갈피 해제</string>
<string name="common_rename">이름 바꾸기</string>
<string name="common_remove">삭제</string>
- <string name="confirmation_remove_alert">%1$s을(를) 삭제하시겠습니까?</string>
+ <string name="confirmation_remove_file_alert">%1$s을(를) 삭제하시겠습니까?</string>
<string name="confirmation_remove_folder_alert">%1$s 및 포함된 내용을 삭제하시겠습니까?</string>
<string name="confirmation_remove_local">로컬만</string>
- <string name="confirmation_remove_folder_local">로컬 콘텐츠만</string>
- <string name="confirmation_remove_remote">서버에서 삭제</string>
+ <string name="confirmation_remove_folder_local">로컬만</string>
+ <string name="confirmation_remove_remote">서버만</string>
<string name="confirmation_remove_remote_and_local">서버와 로컬 모두</string>
<string name="remove_success_msg">성공적으로 삭제함</string>
<string name="remove_fail_msg">삭제할 수 없음</string>
<string name="placeholder_sentence">이것은 자리 비움자입니다</string>
<string name="placeholder_filename">placeholder.txt</string>
<string name="placeholder_filetype">PNG 그림</string>
- <string name="placeholder_filesize">389 KB</string>
- <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+ <string name="placeholder_filesize">389KB</string>
+ <string name="placeholder_timestamp">2012년 05월 18일 오후 12:23</string>
<string name="placeholder_media_time">12:23:45</string>
<string name="instant_upload_on_wifi">Wi-Fi 사용 중일때만 사진 업로드</string>
<string name="instant_video_upload_on_wifi">Wi-Fi 사용 중일때만 동영상 업로드</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">파일 충돌</string>
+ <string name="conflict_message">어떤 파일을 유지하시겠습니까? 두 버전을 모두 선택하면 로컬 파일 이름 뒤에 번호가 추가됩니다.</string>
<string name="conflict_keep_both">모두 저장</string>
+ <string name="conflict_use_local_version">로컬 버전</string>
+ <string name="conflict_use_server_version">서버 버전</string>
<string name="preview_image_description">사진 미리 보기</string>
<string name="preview_image_error_unknown_format">이 사진을 미리 볼 수 없습니다</string>
<string name="error__upload__local_file_not_copied">%1$s을(를) 로컬 폴더 %2$s(으)로 복사할 수 없습니다</string>
<string name="downloader_download_file_not_found">이 파일을 서버에서 더 이상 사용할 수 없습니다</string>
<string name="prefs_category_accounts">계정</string>
<string name="prefs_add_account">계정 추가</string>
- <string name="auth_redirect_non_secure_connection_title">보안 연결이 안전하지 않은 경로로 넘어갑니다.</string>
+ <string name="auth_redirect_non_secure_connection_title">보안 연결이 보안되지 않는 연결로 전환되었습니다.</string>
<string name="actionbar_logger">로그</string>
<string name="log_send_history_button">과거 기록 보내기</string>
<string name="log_send_no_mail_app">로그를 보낼 앱이 없습니다. 메일 앱을 설치하십시오!</string>
<string name="move_file_invalid_overwrite">파일이 이미 대상 폴더에 존재합니다</string>
<string name="move_file_error">이 파일이나 폴더를 이동하는 중 오류가 발생하였습니다</string>
<string name="forbidden_permissions_move">이 파일을 이동할</string>
+ <string name="copy_file_not_found">복사할 수 없습니다. 파일이 존재하는 지 확인하십시오</string>
+ <string name="copy_file_invalid_into_descendent">폴더를 하위 폴더 아래로 복사할 수 없습니다</string>
+ <string name="copy_file_invalid_overwrite">파일이 이미 대상 폴더에 존재합니다</string>
+ <string name="copy_file_error">이 파일이나 폴더를 복사할 수 없습니다.</string>
+ <string name="forbidden_permissions_copy">이 파일을 복사할</string>
<string name="prefs_category_instant_uploading">즉시 업로드</string>
<string name="prefs_category_security">보안</string>
<string name="prefs_instant_video_upload_path_title">동영상 업로드 경로</string>
- <string name="download_folder_failed_content">폴더 %1$s을(를) 다운로드할 수 없음</string>
<string name="shared_subject_header">공유됨</string>
<string name="with_you_subject_header">여러분과</string>
- <string name="subject_token">%1$s 님이 \"%2$s\" 항목을 여러분과 공유하였습니다</string>
+ <string name="subject_user_shared_with_you">%1$s 님이 \"%2$s\" 항목을 여러분과 공유하였습니다</string>
+ <string name="subject_shared_with_you">\"%1$s\"을(를) 여러분과 공유하였습니다</string>
<string name="auth_refresh_button">연결 새로 고침</string>
<string name="auth_host_address">서버 주소</string>
<string name="common_error_out_memory">메모리 부족</string>
<string name="file_list__footer__files">파일 %1$d개</string>
<string name="file_list__footer__files_and_folder">파일 %1$d개, 폴더 1개</string>
<string name="file_list__footer__files_and_folders">파일 %1$d개, 폴더 %2$d개</string>
+ <string name="share_dialog_title">공유</string>
+ <string name="share_no_users">No data shared with users yet</string>
+ <string name="share_add_user_or_group">Add User or Group</string>
+ <string name="share_via_link_section_title">링크 공유</string>
+ <string name="share_via_link_expiration_date_label">만료 날짜 설정</string>
+ <string name="share_via_link_password_label">암호 보호</string>
+ <string name="share_search">검색</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">بیکەوە</string>
<string name="prefs_category_general">گشتی</string>
<string name="prefs_accounts">هەژمارەکان</string>
<string name="prefs_help">یارمەتی</string>
<string name="filedetails_created">درووستبووە:</string>
<string name="filedetails_modified">گۆردراو:</string>
<string name="filedetails_download">داگرتن</string>
+ <string name="action_share">هاوبەشی کردن</string>
<string name="common_yes">بەڵێ</string>
<string name="common_no">نەخێر</string>
<string name="common_ok">باشە</string>
<string name="empty"></string>
<string name="prefs_category_accounts">هەژمارەکان</string>
<string name="auth_host_address">ناونیشانی ڕاژه</string>
+ <string name="share_search">بگەڕێ</string>
</resources>
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <!--TODO re-enable when server-side folder size calculation is available
+ <item>Biggest - Smallest</item>-->
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<string name="drawer_item_accounts">Accounts</string>-->
+ <!--TODO re-enable when "On Device" is available
+ <string name="drawer_item_on_device">On device</string>-->
+ <string name="empty"></string>
+</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Opmaachen</string>
<string name="prefs_category_general">Allgemeng</string>
<string name="prefs_category_more">Méi</string>
<string name="prefs_accounts">Konten</string>
<string name="filedetails_created">Erstallt:</string>
<string name="filedetails_modified">Geännert:</string>
<string name="filedetails_download">Eroflueden</string>
- <string name="filedetails_sync_file">Fichier opfrëschen</string>
- <string name="action_share_file">Link deelen</string>
+ <string name="action_share">Deelen</string>
<string name="common_yes">Jo</string>
<string name="common_no">Nee</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Eroflueden ofbriechen</string>
- <string name="common_cancel_upload">Eroplueden ofbriechen</string>
<string name="common_cancel">Ofbriechen</string>
<string name="common_save_exit">Späicheren an Zoumaachen</string>
<string name="common_error">Feeler</string>
<string name="auth_unsupported_auth_method">De Server ënnerstëtzt dës Authentifizéierungsmethod net</string>
<string name="common_rename">Ëmbenennen</string>
<string name="common_remove">Läschen</string>
- <string name="confirmation_remove_alert">Wëlls du %1$s wierklech läschen?</string>
+ <string name="confirmation_remove_file_alert">Wëlls du %1$s wierklech läschen?</string>
<string name="confirmation_remove_folder_alert">Wëlls du %1$s an de ganzen Inhalt wierklech läschen?</string>
<string name="confirmation_remove_local">Nemme lokal</string>
- <string name="confirmation_remove_folder_local">Nëmme lokal Inhalter</string>
- <string name="confirmation_remove_remote">Vum Server läschen</string>
- <string name="confirmation_remove_remote_and_local">Um Server a lokal</string>
+ <string name="confirmation_remove_folder_local">Nemme lokal</string>
<string name="remove_success_msg">Erfollegräich geläscht</string>
<string name="remove_fail_msg">Läsche feelgeschloen</string>
<string name="rename_dialog_title">Gëff en neien Numm an</string>
<string name="downloader_download_file_not_found">De Fichier ass net méi um Server disponibel</string>
<string name="prefs_category_accounts">Konten</string>
<string name="prefs_add_account">Kont dobäisetzen</string>
- <string name="auth_redirect_non_secure_connection_title">Sécher Connectioun gëtt op eng onsécher Route ëmgeleet.</string>
<string name="actionbar_logger">Protokoller</string>
<string name="log_send_history_button">Historique schécken</string>
<string name="log_send_no_mail_app">Keng App fonnt fir d\'Protokoller ze schécken. Installéier eng Mail-App!</string>
<string name="move_file_invalid_overwrite">De Fichier existéiert schonn am Zildossier</string>
<string name="move_file_error">Beim Réckele vun dësem Fichier oder Dossier ass e Feeler opgetrueden</string>
<string name="forbidden_permissions_move">fir dëse Fichier ze réckelen</string>
+ <string name="copy_file_invalid_overwrite">De Fichier existéiert schonn am Zildossier</string>
<string name="prefs_category_instant_uploading">Direkt eropgeluede Fichieren</string>
<string name="prefs_category_security">Sécherheet</string>
<string name="prefs_instant_video_upload_path_title">Pad fir d\'Eropluede vun de Videoen</string>
- <string name="download_folder_failed_content">D\'Erofluede vum %1$s-Dossier konnt net ofgeschloss ginn</string>
+ <string name="subject_user_shared_with_you">%1$s huet \"%2$s\" mat dir gedeelt</string>
<string name="auth_refresh_button">Connectioun opfrëschen</string>
<string name="auth_host_address">Server-Adress</string>
+ <string name="share_via_link_section_title">Link deelen</string>
+ <string name="share_via_link_expiration_date_label">Verfallsdatum setzen</string>
+ <string name="share_via_link_password_label">Passwuertgeschützt</string>
+ <string name="share_search">Sichen</string>
</resources>
<string name="drawer_item_on_device">On device</string>-->
<string name="common_error_unknown">ຂໍ້ຜິດພາດທີ່ບໍ່ຮູ້ສາເຫດ</string>
<string name="empty"></string>
+ <string name="share_dialog_title">ການແບ່ງປັນ</string>
</resources>
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Visi failai</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
<string name="drawer_item_settings">Parinktys</string>
+ <string name="drawer_item_logs">Žurnalai</string>
+ <string name="drawer_close">Užverti</string>
+ <string name="drawer_open">Atverti</string>
<string name="prefs_category_general">Bendras</string>
<string name="prefs_category_more">Daugiau</string>
<string name="prefs_accounts">Paskyros</string>
<string name="prefs_manage_accounts">Tvarkyti paskyras</string>
+ <string name="prefs_passcode">Užrakto kodas</string>
<string name="prefs_instant_upload">Momentiniai nuotraukų įkėlimai</string>
<string name="prefs_instant_upload_summary">Iš karto nusiųsti nufotografuotas nuotraukas</string>
<string name="prefs_instant_video_upload">Momentiniai video įkėlimai</string>
<string name="prefs_remember_last_share_location">Prisiminti bendrinimo vietą</string>
<string name="prefs_remember_last_upload_location_summary">Prisiminti paskutinio bendrinimo įkėlimo vietą</string>
<string name="recommend_subject">Išbandykite %1$s savo išmaniajame telefone!</string>
+ <string name="recommend_text">Noriu pakviesti tave naudotis %1$s išmaniajame telefone!\nParsisiųks čia: %2$s</string>
<string name="auth_check_server">Patikrinti Serverį</string>
<string name="auth_host_url">Serverio adresas </string>
<string name="auth_username">Prisijungimo vardas</string>
<string name="uploader_info_uploading">Išsiunčiama</string>
<string name="file_list_seconds_ago">prieš sekundę</string>
<string name="file_list_empty">Čia tuščia. Įkelkite ką nors!</string>
+ <string name="file_list_loading">Įkeliama...</string>
+ <string name="file_list_no_app_for_file_type">Nėra programėlės šiam failo tipui!</string>
<string name="local_file_list_empty">Šiame aplanke nėra failų.</string>
<string name="filedetails_select_file">Palieskite failą, kad parodyti papildomą informaciją.</string>
<string name="filedetails_size">Dydis:</string>
<string name="filedetails_created">Sukurta:</string>
<string name="filedetails_modified">Modifikuota:</string>
<string name="filedetails_download">Atsisiųsti</string>
- <string name="filedetails_sync_file">Atnaujinti failą</string>
+ <string name="filedetails_sync_file">Sinchronizuojama</string>
<string name="filedetails_renamed_in_upload_msg">Įkėlimo metu failas buvo pervadintas į %1$s</string>
- <string name="action_share_file">Dalintis nuoroda</string>
- <string name="action_unshare_file">Nebesidalinti nuoroda</string>
+ <string name="list_layout">Sąrašo išdėstymas</string>
+ <string name="action_share">Dalintis</string>
<string name="common_yes">Taip</string>
<string name="common_no">Ne</string>
<string name="common_ok">Gerai</string>
- <string name="common_cancel_download">Atšaukti parsiuntimą</string>
- <string name="common_cancel_upload">Atšaukti siuntimą</string>
+ <string name="common_cancel_sync">Atšaukti sinchronizavimą</string>
<string name="common_cancel">Atšaukti</string>
<string name="common_save_exit">Išsaugoti ir Išeiti</string>
<string name="common_error">Klaida</string>
<string name="uploader_info_dirname">Katalogo pavadinimas</string>
<string name="uploader_upload_in_progress_ticker">Įkeliama ...</string>
<string name="uploader_upload_in_progress_content">%1$d%% Siunčiama %2$s</string>
- <string name="uploader_upload_succeeded_ticker">Nusiuntimas pavyko</string>
+ <string name="uploader_upload_succeeded_ticker">Įkėlimas pavyko</string>
<string name="uploader_upload_succeeded_content_single">%1$s buvo sėkmingai nusiųstas</string>
<string name="uploader_upload_failed_ticker">Nusiuntimas nepavyko</string>
<string name="uploader_upload_failed_content_single">Nepavyko baigti %1$s nusiuntimo</string>
<string name="sync_fail_content">%1$s sinchronizacija nepavyko</string>
<string name="sync_fail_content_unauthorized">Netinkamas slaptažodis %1$s</string>
<string name="sync_conflicts_in_favourites_ticker">Rastas konfliktas</string>
+ <string name="sync_conflicts_in_favourites_content">%1$d sinchronizuojami failai nebuvo susinchronizuoti</string>
+ <string name="sync_fail_in_favourites_ticker">Sinchronizuojamų failų klaida</string>
<string name="sync_fail_in_favourites_content">Nepavyko sinchronizuoti %1$d failų turinio (%2$d konfliktų)</string>
<string name="sync_foreign_files_forgotten_ticker">Keli vietiniai failai buvo užmiršti</string>
+ <string name="sync_foreign_files_forgotten_content">%1$d failai iš %2$s aplanko negali būti nukopijuoti</string>
+ <string name="sync_foreign_files_forgotten_explanation">Iki 1.3.16 versijos, iš šio įrenginio įkelti failai nukopijuoti į vietinį %1$s aplanką, siekiant išvengti duomenų praradimo kai vienas failas sinchronizuojamas su keletu įrenginių.\n\nTodėl visi failai įkelti su ankstesne versija nukopijuoti į %2$s aplanką. Dėja kopijavimas nepavuko dėl klaidos sinchronizuojant paskyrą. Galita palikti failus ir pašalinti ryšį su %3$s, arba perkelti failą(us) į %1$s aplanką ir palikti ryšį su %4$s.\n\nŽemiau pateikti vietiniai failai ir aplankas(ai), bei nutolę failai susieti per %5$s.</string>
<string name="sync_current_folder_was_removed">Aplankas %1$s nebeegzistuoja</string>
<string name="foreign_files_move">Perkelti visus</string>
<string name="foreign_files_success">Visi failai buvo perkelti</string>
<string name="foreign_files_fail">Kai kurių failų negalima perkelti</string>
<string name="foreign_files_local_text">Vietinis: %1$s</string>
<string name="foreign_files_remote_text">Nuotolinis: %1$s</string>
+ <string name="upload_query_move_foreign_files">Pasirinktiems failams nepakanka vietos %1$s aplanke. Gal juos perkelti?</string>
+ <string name="pass_code_enter_pass_code">Prašau įterpti užraktą</string>
+ <string name="pass_code_configure_your_pass_code">Įveskite užraktą</string>
+ <string name="pass_code_configure_your_pass_code_explanation">Kiekvieną kartą paleidus programėle bus reikalaujamas užraktas</string>
+ <string name="pass_code_reenter_your_pass_code">Prašau pakartoti užraką</string>
+ <string name="pass_code_remove_your_pass_code">Užrakto pašalinimas</string>
+ <string name="pass_code_mismatch">Nesutampa užraktas</string>
+ <string name="pass_code_wrong">Neteisingas užraktas</string>
+ <string name="pass_code_removed">Užraktas pašalintas</string>
+ <string name="pass_code_stored">Užraktas išsaugotas</string>
<string name="media_notif_ticker">%1$s muzikos grotuvas</string>
<string name="media_state_playing">%1$s (grojama)</string>
<string name="media_state_loading">%1$s (įkeliama)</string>
<string name="auth_no_net_conn_title">Nėra tinklo ryšio</string>
<string name="auth_nossl_plain_ok_title">Saugus prisijungimas negalimas.</string>
<string name="auth_connection_established">Ryšys užmegztas</string>
+ <string name="auth_testing_connection">Bandomas sujungimas</string>
<string name="auth_not_configured_title">Sugadinta serverio konfigūracija</string>
<string name="auth_account_not_new">To paties vartotojo ir serverio paskyra jau egzistuoja šiame įrenginyje</string>
+ <string name="auth_account_not_the_same">Įvestas vartotojas neatitinka šios paskyros vartotojo</string>
<string name="auth_unknown_error_title">Įvyko nežinoma klaida!</string>
<string name="auth_unknown_host_title">Nepavyko rasti mazgo</string>
<string name="auth_incorrect_path_title">Šis serveris netinkamas</string>
<string name="auth_connecting_auth_server">Jungiamasi prie autentikacijos serverio...</string>
<string name="auth_unsupported_auth_method">Serveris nepalaiko šio autentikacijos metodo</string>
<string name="auth_unsupported_multiaccount">%1$s nepalaiko kelių paskyrų iš karto</string>
+ <string name="auth_fail_get_user_name">Serveris negražina tinkamo vartotojo ID, susisiekite su administratoriumi</string>
<string name="auth_can_not_auth_against_server">Jungiamasi prie autentikacijos serverio...</string>
+ <string name="auth_account_does_not_exist">Paskyra neegzistuoja įrenginyje</string>
<string name="favorite">Mėgiamas</string>
+ <string name="unfavorite">Nebemėgti</string>
<string name="common_rename">Pervadinti</string>
<string name="common_remove">Pašalinti</string>
- <string name="confirmation_remove_alert">Ar tikrai norite pašalinti %1$s?</string>
+ <string name="confirmation_remove_file_alert">Ar tikrai norite pašalinti %1$s?</string>
<string name="confirmation_remove_folder_alert">Ar tikrai norite pašalinti %1$s ir ten esantį turinį?</string>
<string name="confirmation_remove_local">Tik vietiniai</string>
- <string name="confirmation_remove_folder_local">Tik vietinis turinys</string>
- <string name="confirmation_remove_remote">Pašalinti iš serverio</string>
- <string name="confirmation_remove_remote_and_local">Nutolę ir vietiniai</string>
+ <string name="confirmation_remove_folder_local">Tik vietiniai</string>
+ <string name="confirmation_remove_remote">Iš serverio</string>
+ <string name="confirmation_remove_remote_and_local">Išorinis & vietinis</string>
<string name="remove_success_msg">Pašalinta sėkmingai</string>
<string name="remove_fail_msg">Pašalinti nepavyko</string>
<string name="rename_dialog_title">Įveskite naują pavadinimą</string>
<string name="sync_file_nothing_to_do_msg">Failo turinys jau sunchronizuotas</string>
<string name="create_dir_fail_msg">Aplanko sukurti nepavyko</string>
<string name="filename_forbidden_characters">Neleistini simboliai: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">Failo vardas sudarytas iš neleistinų simbolių</string>
<string name="filename_empty">Failo pavadinimas negali būti tuščias</string>
<string name="wait_a_moment">Truputį palaukite</string>
<string name="filedisplay_unexpected_bad_get_content">Netikėta problema ; prašome pasirinkti failą iš kitos programėlės</string>
<string name="filedisplay_no_file_selected">Joks failas nebuvo pasirinktas</string>
<string name="activity_chooser_title">Siųsti nuorodą asmeniui ...</string>
+ <string name="wait_for_tmp_copy_from_private_storage">Kopijuoti failą iš privačios talpyklos</string>
<string name="oauth_check_onoff">Prisijungti naudojant oAuth2</string>
<string name="oauth_login_connection">Jungiamasi prie oAuth2 serverio...</string>
<string name="ssl_validator_header">Serverio tapatybė negali būti patikrinta</string>
<string name="ssl_validator_label_validity_to">Iki:</string>
<string name="ssl_validator_label_signature">Parašas:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritmas:</string>
+ <string name="digest_algorithm_not_available">Tavo telefonas nepalaiko digest algoritmo.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Kontrolinis kodas:</string>
+ <string name="certificate_load_problem">Klaida įkeliant sertifikatą.</string>
<string name="ssl_validator_null_cert">Sertifikatas negali būti parodytas.</string>
<string name="ssl_validator_no_info_about_error">- Nėra informacijos apie klaidą</string>
+ <string name="placeholder_sentence">Rezervas</string>
+ <string name="placeholder_filename">rezervas.txt</string>
<string name="placeholder_filetype">PNG paveikslėlis</string>
<string name="placeholder_filesize">389 KB</string>
<string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
<string name="placeholder_media_time">12:23:45</string>
<string name="instant_upload_on_wifi">Įkelti nuotraukas tik kai prisijungiama per WiFi</string>
<string name="instant_video_upload_on_wifi">Įkelti video tik per WiFi</string>
+ <string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Failų konfliktas</string>
+ <string name="conflict_message">Kuriuos failus palikti? Jei pažymėsite abi versijas, vietinis failas bus pervadintas, pridedant skaičių prie pavadinimo.</string>
<string name="conflict_keep_both">Palikti abu</string>
+ <string name="conflict_use_local_version">Vietinė versija</string>
+ <string name="conflict_use_server_version">Versija serveryje</string>
<string name="preview_image_description">Paveikslėlio peržiūra</string>
<string name="preview_image_error_unknown_format">Neįmanoma parodyti šio paveikslėlio</string>
+ <string name="error__upload__local_file_not_copied">%1$s negali būti nukopijuota į %2$s vietinį katalogą</string>
+ <string name="prefs_instant_upload_path_title">Įkėlimo kelias</string>
+ <string name="share_link_no_support_share_api">Atsiprašome, bet serveris nepalaiko dalijimosi. Susisiekite su administratoriumi.</string>
+ <string name="share_link_file_no_exist">Nepavyko pasidalinti. Patikrinkite ar failas egzistuoja</string>
<string name="share_link_file_error">Įvyko klaida bandant dalinti šį failą ar aplanką</string>
+ <string name="unshare_link_file_no_exist">Nepavyksta nebedalinti. Patikrinkite ar failas egzistuoja</string>
<string name="unshare_link_file_error">Įvyko klaida bandant nebedalinti šio failu ar aplanku</string>
+ <string name="share_link_password_title">Įveskite slaptažodį</string>
+ <string name="share_link_empty_password">Slaptažodis privalomas</string>
<string name="activity_chooser_send_file_title">Siųsti</string>
<string name="copy_link">Kopijuoti nuorodą</string>
<string name="clipboard_text_copied">Nukopijuota į talpyklę</string>
+ <string name="error_cant_bind_to_operations_service">Kritinė klaida: negalima įvykdyti operacijos</string>
+ <string name="network_error_socket_exception">Klaida prisijungiant prie serverio.</string>
+ <string name="network_error_socket_timeout_exception">Klaida prisijungiant prie serverio, operacija neįvykdyta</string>
+ <string name="network_error_connect_timeout_exception">Klaida prisijungiant prie serverio, operacija neįvykdyta</string>
+ <string name="network_host_not_available">Serveris nepasiekiamas, operacija negali būti atlikta</string>
<string name="empty"></string>
+ <string name="forbidden_permissions">Neturite leidimo %s</string>
+ <string name="forbidden_permissions_rename">pervadinti failo</string>
+ <string name="forbidden_permissions_delete">ištrinti failo</string>
+ <string name="share_link_forbidden_permissions">dalintis failu</string>
+ <string name="unshare_link_forbidden_permissions">nebesidalinti failu</string>
+ <string name="forbidden_permissions_create">sukurti failą</string>
+ <string name="uploader_upload_forbidden_permissions">įkelti į aplanką</string>
+ <string name="downloader_download_file_not_found">Failas neegzistuoja serveryje</string>
<string name="prefs_category_accounts">Paskyros</string>
+ <string name="prefs_add_account">Pridėti paskyrą</string>
+ <string name="auth_redirect_non_secure_connection_title">Saugus sujungimas nukreiptas per nesaugų kelią</string>
+ <string name="actionbar_logger">Žurnalai</string>
+ <string name="log_send_history_button">Siųsti istoriją</string>
+ <string name="log_send_no_mail_app">Žurnalų siuntimui nėra programėlės. Įdiekite pašto programėlę!</string>
+ <string name="log_send_mail_subject">%1$s Android žurnalai</string>
+ <string name="log_progress_dialog_text">Įkeliama...</string>
+ <string name="saml_authentication_required_text">Reikalinga autentikacija</string>
<string name="saml_authentication_wrong_pass">Neteisingas slaptažodis</string>
+ <string name="actionbar_move">perkelti</string>
+ <string name="file_list_empty_moving">Nieko nėra. Galite pridėti aplanką!</string>
<string name="folder_picker_choose_button_text">Pasirinkite</string>
+ <string name="move_file_not_found">Negalima perkelti. Prašau patikrinti ar failas egzistuoja</string>
+ <string name="move_file_invalid_into_descendent">Neįmanoma perkelti aplanko į poaplankį</string>
+ <string name="move_file_invalid_overwrite">Failas aplanke jau egzistuoja</string>
+ <string name="move_file_error">Klaida perkeliant failą ar aplanką</string>
+ <string name="forbidden_permissions_move">perkelti šį failą</string>
+ <string name="copy_file_not_found">Nepavyko nukopijuoti. Patikrinkite ar failas egzistuoja</string>
+ <string name="copy_file_invalid_into_descendent">Neįmanoma nukopijuoti aplanko į poaplankį</string>
+ <string name="copy_file_invalid_overwrite">Failas aplanke jau egzistuoja</string>
+ <string name="copy_file_error">Klaida kopijuojant failą ar aplanką</string>
+ <string name="forbidden_permissions_copy">kopijuoti failo</string>
+ <string name="prefs_category_instant_uploading">Momentinis įkėlimas</string>
<string name="prefs_category_security">Saugumas</string>
+ <string name="prefs_instant_video_upload_path_title">Vaizdo įrašų įkėlimo kelias</string>
+ <string name="sync_folder_failed_content">%1$s sinchronizavimas negali būti užbaigtas.</string>
+ <string name="shared_subject_header">Dalinamasi</string>
+ <string name="with_you_subject_header">su jumis</string>
+ <string name="subject_user_shared_with_you">%1$s dalinamasi \"%2$s\" su jumis</string>
+ <string name="subject_shared_with_you">\"%1$s\" dalinamasi su jumis</string>
+ <string name="auth_refresh_button">Atnaujinti sujungimą</string>
<string name="auth_host_address">Serverio adresas</string>
+ <string name="common_error_out_memory">Nepakanka atminties</string>
+ <string name="username">Prisijungimo vardas</string>
+ <string name="file_list__footer__folder">1 aplankalas</string>
+ <string name="file_list__footer__folders">%1$d aplankalai</string>
+ <string name="file_list__footer__file">1 failas</string>
+ <string name="file_list__footer__file_and_folder">1 failas, 1 aplankalas</string>
+ <string name="file_list__footer__file_and_folders">1 failas, %1$d aplankai</string>
+ <string name="file_list__footer__files">%1$d failai</string>
+ <string name="file_list__footer__files_and_folder">%1$d failai, 1 aplankas</string>
+ <string name="file_list__footer__files_and_folders">%1$d failai, %2$d aplankai</string>
+ <string name="share_dialog_title">Dalijimasis</string>
+ <string name="share_no_users">Su vartotojais niekuo nesidalinama</string>
+ <string name="share_add_user_or_group">Pridėti vartotoją ar grupę</string>
+ <string name="share_via_link_section_title">Dalintis nuoroda</string>
+ <string name="share_via_link_expiration_date_label">Nustatykite galiojimo laiką</string>
+ <string name="share_via_link_password_label">Apsaugotas slaptažodžiu</string>
+ <string name="share_search">Ieškoti</string>
+ <string name="search_users_and_groups_hint">Surasti vartotoją ar grupę</string>
+ <string name="share_group_clarification">%1$s (grupė)</string>
+ <string name="share_sharee_unavailable">Serveris nepalaiko dalinimosi su vartotojais kliente.
+\nSusisiekite su administratoriumi.</string>
</resources>
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Visas datnes</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_settings">Iestatījumi</string>
+ <string name="drawer_close">Aizvērt</string>
+ <string name="drawer_open">Atvērt</string>
<string name="prefs_category_general">Vispārīgi</string>
<string name="prefs_category_more">Vairāk</string>
<string name="prefs_accounts">Konti</string>
<string name="prefs_help">Palīdzība</string>
<string name="prefs_recommend">Ieteikt draugam</string>
<string name="prefs_feedback">Atsauksmes</string>
+ <string name="recommend_subject">Izmēģini %1$s uz savu viedtālruni!</string>
+ <string name="auth_check_server">Pārbaudīt serveri</string>
<string name="auth_username">Lietotājvārds</string>
<string name="auth_password">Parole</string>
<string name="sync_string_files">Datnes</string>
<string name="uploader_info_uploading">Augšupielādē</string>
<string name="file_list_seconds_ago">sekundes atpakaļ</string>
<string name="file_list_empty">Te vēl nekas nav. Rīkojies, sāc augšupielādēt!</string>
+ <string name="file_list_loading">Ielādē…</string>
<string name="local_file_list_empty">Šajā mapē nav failu</string>
<string name="filedetails_select_file">Uzsitiet uz datnes, lai redzētu papildinformāciju.</string>
<string name="filedetails_size">Izmērs:</string>
<string name="filedetails_created">Izveidota:</string>
<string name="filedetails_modified">Modificēta:</string>
<string name="filedetails_download">Lejupielādēt</string>
- <string name="filedetails_sync_file">Atsvaidzināt failu</string>
<string name="filedetails_renamed_in_upload_msg">Datne tika pārsaukta uz %1$s augšupielādes laikā</string>
+ <string name="action_share">Dalīties</string>
<string name="common_yes">Jā</string>
<string name="common_no">Nē</string>
<string name="common_ok">Labi</string>
- <string name="common_cancel_download">Atcelt lejupielādi</string>
- <string name="common_cancel_upload">Atcelt augšupielādi</string>
<string name="common_cancel">Atcelt</string>
<string name="common_save_exit">Saglabāt un iziet</string>
<string name="common_error">Kļūda</string>
<string name="common_rename">Pārsaukt</string>
<string name="common_remove">Izņemt</string>
<string name="confirmation_remove_local">Tikai lokālos</string>
- <string name="confirmation_remove_folder_local">Tikai lokālo saturu</string>
- <string name="confirmation_remove_remote">Izņemt no servera</string>
- <string name="confirmation_remove_remote_and_local">Attālinātās un lokālās</string>
+ <string name="confirmation_remove_folder_local">Tikai lokālos</string>
+ <string name="confirmation_remove_remote">No servera</string>
<string name="remove_success_msg">Veiksmīgi izņemts</string>
<string name="remove_fail_msg">Neizdevās izņemt</string>
<string name="rename_dialog_title">Ievadīt jaunu nosaukumu</string>
<string name="rename_server_fail_msg">Nevarēja pabeigt pārsaukšanu</string>
<string name="sync_file_fail_msg">Nevarēja atzīmēt attālinātas datnes</string>
<string name="sync_file_nothing_to_do_msg">Datnes saturs jau ir sinhronizēts</string>
+ <string name="create_dir_fail_msg">Mapi nevarēja izveidot</string>
<string name="wait_a_moment">Uzgaidīt brīdi</string>
<string name="filedisplay_unexpected_bad_get_content">Negaidīta problēma; lūdzu, izvēlieties datni no citas lietotnes</string>
<string name="filedisplay_no_file_selected">Netika izvēlēta neviena datne</string>
<string name="ssl_validator_label_validity_to">Kam:</string>
<string name="ssl_validator_label_signature">Paraksts:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritms:</string>
+ <string name="placeholder_filetype">PNG attēls</string>
<string name="instant_upload_on_wifi">Attēlus augšupielādēt tikai caur WiFi</string>
<string name="instant_upload_path">/TūlītējaAugšupielāde</string>
<string name="conflict_keep_both">Paturēt abas</string>
+ <string name="preview_image_error_unknown_format">Šo attēlu nevar attēlot</string>
+ <string name="share_link_password_title">Ievadiet paroli</string>
+ <string name="share_link_empty_password">Jums ir jāievada paroli</string>
<string name="activity_chooser_send_file_title">Sūtīt</string>
+ <string name="copy_link">Kopēt saiti</string>
<string name="empty"></string>
+ <string name="forbidden_permissions_rename">lai pārsauktu šo datni</string>
+ <string name="forbidden_permissions_delete">lai dzēstu šo datni</string>
+ <string name="share_link_forbidden_permissions">lai dalītu šo datni</string>
+ <string name="unshare_link_forbidden_permissions">lai pārtrauktu šis datnes dalīšanu</string>
+ <string name="forbidden_permissions_create">lai izveidotu datni</string>
<string name="prefs_category_accounts">Konti</string>
+ <string name="prefs_add_account">Pievienot kontu</string>
+ <string name="log_progress_dialog_text">Ielādē datus…</string>
<string name="saml_authentication_wrong_pass">Nepareiza parole</string>
+ <string name="actionbar_move">Pārvietot</string>
+ <string name="file_list_empty_moving">Šeit nekā nav. Jūs varat pievienot mapi!</string>
<string name="folder_picker_choose_button_text">Izvēlieties</string>
+ <string name="forbidden_permissions_move">lai pārvietotu šo datni</string>
+ <string name="forbidden_permissions_copy">lai kopētu šo datni</string>
<string name="prefs_category_security">Drošība</string>
+ <string name="shared_subject_header">koplietots</string>
+ <string name="with_you_subject_header">ar jums</string>
<string name="auth_host_address">Servera adrese</string>
+ <string name="username">Lietotājvārds</string>
+ <string name="file_list__footer__folder">1 mape</string>
+ <string name="file_list__footer__file">1 datne</string>
+ <string name="share_dialog_title">Dalīšanās</string>
+ <string name="share_via_link_section_title">Dalīt saiti</string>
+ <string name="share_via_link_expiration_date_label">Iestaties termiņa datumu</string>
+ <string name="share_via_link_password_label">Aizsargāt ar paroli</string>
+ <string name="share_search">Meklēt</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Отвори</string>
<string name="prefs_category_general">Општо</string>
<string name="prefs_category_more">Повеќе</string>
<string name="prefs_accounts">Сметки</string>
<string name="filedetails_created">Создадено:</string>
<string name="filedetails_modified">Изменето:</string>
<string name="filedetails_download">Преземање</string>
- <string name="filedetails_sync_file">Освежи ја датотеката</string>
<string name="filedetails_renamed_in_upload_msg">Датотеката беше преименувана во %1$s за време на префрлањето</string>
- <string name="action_share_file">Сподели ја врската</string>
- <string name="action_unshare_file">Тргнете го споделувањето на врската</string>
+ <string name="action_share">Сподели</string>
<string name="common_yes">Да</string>
<string name="common_no">Не</string>
<string name="common_ok">Во ред</string>
- <string name="common_cancel_download">Откажи превземање</string>
- <string name="common_cancel_upload">Откажи прикачување</string>
<string name="common_cancel">Откажи</string>
<string name="common_save_exit">Сними & Излез</string>
<string name="common_error">Грешка</string>
<string name="auth_account_does_not_exist">Сметката сеуште не постои на овој уред</string>
<string name="common_rename">Преименувај</string>
<string name="common_remove">Отстрани</string>
- <string name="confirmation_remove_alert">Дали навистина сакаш да ја отстраниш %1$s?</string>
+ <string name="confirmation_remove_file_alert">Дали навистина сакаш да ја отстраниш %1$s?</string>
<string name="confirmation_remove_folder_alert">Дали навистина сакаш да го отстранам %1$s и неговата содржина?</string>
<string name="confirmation_remove_local">Само локално</string>
- <string name="confirmation_remove_folder_local">Само локална содржина</string>
- <string name="confirmation_remove_remote">Отстрани од серверот</string>
- <string name="confirmation_remove_remote_and_local">Далечинско и локално</string>
+ <string name="confirmation_remove_folder_local">Само локално</string>
<string name="remove_success_msg">Одстранувањето е успешно</string>
<string name="remove_fail_msg">Одстранувањето е неуспешно</string>
<string name="rename_dialog_title">Внеси ново име</string>
<string name="downloader_download_file_not_found">Датотеката веќе не е достапна на серверот</string>
<string name="prefs_category_accounts">Сметки</string>
<string name="prefs_add_account">Додади сметка</string>
- <string name="auth_redirect_non_secure_connection_title">Сигурната конекција е преусмерена на несигурна рута.</string>
<string name="actionbar_logger">Логови</string>
<string name="log_send_history_button">Прати историја</string>
<string name="log_send_no_mail_app">Нема апликација за праќање на логови. Инсталирајте апликација за пошта!</string>
<string name="move_file_invalid_overwrite">Датотеката веќе постои во целната папка</string>
<string name="move_file_error">Се случи грешка кога пробував да ја преместам оваа датотека или папка</string>
<string name="forbidden_permissions_move">да ја преместам оваа датотека</string>
+ <string name="copy_file_invalid_overwrite">Датотеката веќе постои во целната папка</string>
<string name="prefs_category_instant_uploading">Инстант прикачувања</string>
<string name="prefs_category_security">Безбедност</string>
<string name="prefs_instant_video_upload_path_title">Прикачи патека на видео</string>
- <string name="download_folder_failed_content">Превземањето на папката %1$s не може да се заврши</string>
+ <string name="subject_user_shared_with_you">%1$s сподели \"%2$s\" со тебе</string>
<string name="auth_refresh_button">Освежи ја конекцијата</string>
<string name="auth_host_address">Адреса на сервер</string>
+ <string name="share_dialog_title">Споделување</string>
+ <string name="share_via_link_section_title">Сподели ја врската</string>
+ <string name="share_via_link_expiration_date_label">Постави рок на траење</string>
+ <string name="share_via_link_password_label">Заштити со лозинка</string>
+ <string name="share_search">Барај</string>
</resources>
<string name="auth_password">Нууц үг</string>
<string name="sync_string_files">Файлууд</string>
<string name="uploader_btn_upload_text">Байршуулах</string>
+ <string name="action_share">Түгээх</string>
<string name="create_account">Аккаунт үүсгэх</string>
<string name="common_remove">Устгах</string>
<string name="empty"></string>
<string name="prefs_category_security">Аюулгүй байдал</string>
+ <string name="share_dialog_title">Түгээлт</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Buka</string>
<string name="prefs_category_general">Umum</string>
<string name="prefs_category_more">Lanjutan</string>
<string name="prefs_accounts">Akaun</string>
<string name="filedetails_created">Telah dibina:</string>
<string name="filedetails_modified">Telah diubah:</string>
<string name="filedetails_download">Muatturun</string>
+ <string name="action_share">Kongsi</string>
<string name="common_yes">Ya</string>
<string name="common_no">Tidak</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_upload">Batal muat naik</string>
<string name="common_cancel">Batal</string>
<string name="common_save_exit">Simpan & Keluar</string>
<string name="common_error">Ralat</string>
<string name="common_rename">Namakan</string>
<string name="common_remove">Buang</string>
<string name="confirmation_remove_local">Lokal sahaja</string>
+ <string name="confirmation_remove_folder_local">Lokal sahaja</string>
<string name="activity_chooser_send_file_title">Hantar</string>
<string name="empty"></string>
<string name="prefs_category_accounts">Akaun</string>
<string name="auth_host_address">Alamat pelayan</string>
+ <string name="share_search">Cari</string>
</resources>
<string name="common_cancel">ပယ်ဖျက်မည်</string>
<string name="empty"></string>
<string name="folder_picker_choose_button_text">ရွေးချယ်</string>
+ <string name="share_via_link_expiration_date_label">သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်</string>
</resources>
<string name="drawer_item_settings">Innstillinger</string>
<string name="drawer_item_logs">Logger</string>
<string name="drawer_close">Lukk</string>
+ <string name="drawer_open">Åpne</string>
<string name="prefs_category_general">Generelt</string>
<string name="prefs_category_more">Mer</string>
<string name="prefs_accounts">Kontoer</string>
<string name="file_list_seconds_ago">for få sekunder siden</string>
<string name="file_list_empty">Ingenting her. Last opp noe!</string>
<string name="file_list_loading">Laster...</string>
+ <string name="file_list_no_app_for_file_type">Ingen app funnet for filtypen!</string>
<string name="local_file_list_empty">Det er ingen filer i denne mappen.</string>
<string name="filedetails_select_file">Trykk på en fil for å vise ekstra informasjon.</string>
<string name="filedetails_size">Størrelse:</string>
<string name="filedetails_created">Opprettet:</string>
<string name="filedetails_modified">Endret:</string>
<string name="filedetails_download">Last ned</string>
- <string name="filedetails_sync_file">Oppdater fil</string>
<string name="filedetails_renamed_in_upload_msg">Filnavnet ble endret til %1$s under opplasting</string>
<string name="list_layout">Listeoppsett</string>
- <string name="action_share_file">Del lenke</string>
- <string name="action_unshare_file">Avslutt deling av lenke</string>
+ <string name="action_share">Delt ressurs</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nei</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Avbryt nedlasting</string>
- <string name="common_cancel_upload">Avbryt opplasting</string>
<string name="common_cancel">Avbryt</string>
<string name="common_save_exit">Lagre og avslutt</string>
<string name="common_error">Feil</string>
<string name="unfavorite">Fjern favoritt</string>
<string name="common_rename">Endre navn</string>
<string name="common_remove">Fjern</string>
- <string name="confirmation_remove_alert">Vil du virkelig fjerne %1$s?</string>
+ <string name="confirmation_remove_file_alert">Vil du virkelig fjerne %1$s?</string>
<string name="confirmation_remove_folder_alert">Vil du virkelig fjerne %1$s inkludert innholdet?</string>
<string name="confirmation_remove_local">Kun lokalt</string>
- <string name="confirmation_remove_folder_local">Kun lokalt innhold</string>
- <string name="confirmation_remove_remote">Fjern fra server</string>
- <string name="confirmation_remove_remote_and_local">Ekstern og lokal</string>
+ <string name="confirmation_remove_folder_local">Kun lokalt</string>
+ <string name="confirmation_remove_file_remote">Fra server</string>
+ <string name="confirmation_remove_remote_and_local">Ekstern & lokal</string>
<string name="remove_success_msg">Fjerning var vellykket</string>
<string name="remove_fail_msg">Fjerning mislyktes</string>
<string name="rename_dialog_title">Skriv inn et nytt navn</string>
<string name="instant_upload_on_wifi">Kun last opp bilder via WiFi</string>
<string name="instant_video_upload_on_wifi">Last opp video kun via WiFi</string>
<string name="instant_upload_path">/Direkteopplasting</string>
+ <string name="conflict_title">Filkonflikt</string>
+ <string name="conflict_message">Hvilke filer ønsker du å beholder? Hvis du velger begge versjonene, får den lokale filen lagt til et tall i navnet.</string>
<string name="conflict_keep_both">Behold begge</string>
+ <string name="conflict_use_local_version">lokal versjon</string>
+ <string name="conflict_use_server_version">server-versjon</string>
<string name="preview_image_description">Bildeforhåndsvisning</string>
<string name="preview_image_error_unknown_format">Dette bildet kan ikke vises</string>
<string name="error__upload__local_file_not_copied">%1$s kunne ikke kopieres til lokal mappe %2$s</string>
<string name="downloader_download_file_not_found">Filen finnes ikke på serveren lenger</string>
<string name="prefs_category_accounts">Kontoer</string>
<string name="prefs_add_account">Legg til en konto</string>
- <string name="auth_redirect_non_secure_connection_title">Sikker forbindelse er omdirigert til en usikker rute.</string>
+ <string name="auth_redirect_non_secure_connection_title">Sikker tilkobling videresendes gjennom en usikker rute.</string>
<string name="actionbar_logger">Logger</string>
<string name="log_send_history_button">Send historikk</string>
<string name="log_send_no_mail_app">Ingen app for sending av logger funnet. Installer epost-app!</string>
<string name="move_file_invalid_overwrite">Filen finnes allerede i målmappen</string>
<string name="move_file_error">En feil oppstod ved flytting av denne filen eller mappen</string>
<string name="forbidden_permissions_move">å flytte denne filen</string>
+ <string name="copy_file_not_found">Kan ikke kopiere. Sjekk om filen eksisterer</string>
+ <string name="copy_file_invalid_into_descendent">Det er ikke mulig å kopiere en mappe inn i sin egen undermappe</string>
+ <string name="copy_file_invalid_overwrite">Filen finnes allerede i målmappen</string>
+ <string name="copy_file_error">En feil oppstod ved kopiering av denne filen eller mappen</string>
+ <string name="forbidden_permissions_copy">å kopiere denne filen</string>
<string name="prefs_category_instant_uploading">Umiddelbare opplastinger</string>
<string name="prefs_category_security">Sikkerhet</string>
<string name="prefs_instant_video_upload_path_title">Sti til video-opplasting</string>
- <string name="download_folder_failed_content">Nedlasting av %1$s mappen kunne ikke fullføres</string>
<string name="shared_subject_header">delte</string>
<string name="with_you_subject_header">med deg</string>
- <string name="subject_token">%1$s delte \"%2$s\" med deg</string>
+ <string name="subject_user_shared_with_you">%1$s delte \"%2$s\" med deg</string>
+ <string name="subject_shared_with_you">\"%1$s\" er blitt delt med deg</string>
<string name="auth_refresh_button">Oppfrisk forbindelse</string>
<string name="auth_host_address">Server-adresse</string>
<string name="common_error_out_memory">Ikke nok minne</string>
<string name="file_list__footer__files">%1$d filer</string>
<string name="file_list__footer__files_and_folder">%1$d filer, 1 mappe</string>
<string name="file_list__footer__files_and_folders">%1$d filer, %2$d mapper</string>
+ <string name="share_dialog_title">Deling</string>
+ <string name="share_no_users">Ingen data delt med brukere ennå</string>
+ <string name="share_add_user_or_group">Legg til bruker eller gruppe</string>
+ <string name="share_via_link_section_title">Del lenke</string>
+ <string name="share_via_link_expiration_date_label">Sett utløpsdato</string>
+ <string name="share_via_link_password_label">Passordbeskyttet</string>
+ <string name="share_search">Søk</string>
</resources>
<string name="drawer_item_settings">Instellingen</string>
<string name="drawer_item_logs">Logs</string>
<string name="drawer_close">Sluiten</string>
+ <string name="drawer_open">Open</string>
<string name="prefs_category_general">Algemeen</string>
<string name="prefs_category_more">Meer</string>
<string name="prefs_accounts">Accounts</string>
<string name="file_list_seconds_ago">seconden geleden</string>
<string name="file_list_empty">Er bevindt zich hier niets. Upload een bestand!</string>
<string name="file_list_loading">Laden...</string>
+ <string name="file_list_no_app_for_file_type">Geen app gevonden voor het bestandstype!</string>
<string name="local_file_list_empty">Er staan geen bestanden in deze map.</string>
<string name="filedetails_select_file">Druk op een bestand om extra informatie weer te geven</string>
<string name="filedetails_size">Grootte:</string>
<string name="filedetails_created">Aangemaakt:</string>
<string name="filedetails_modified">Aangepast:</string>
<string name="filedetails_download">Download</string>
- <string name="filedetails_sync_file">Bestand verversen</string>
+ <string name="filedetails_sync_file">Synchroniseren</string>
<string name="filedetails_renamed_in_upload_msg">Bestand is tijdens het uploaden hernoemd naar %1$s</string>
<string name="list_layout">Lijst layout</string>
- <string name="action_share_file">Deel link</string>
- <string name="action_unshare_file">Link niet meer delen</string>
+ <string name="action_share">Deel</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nee</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Annuleer download</string>
- <string name="common_cancel_upload">Upload afbreken</string>
+ <string name="common_cancel_sync">Annuleren synchronisatie</string>
<string name="common_cancel">Annuleren</string>
<string name="common_save_exit">Opslaan & Afsluiten</string>
<string name="common_error">Fout</string>
<string name="unfavorite">Niet meer favoriet</string>
<string name="common_rename">Hernoemen</string>
<string name="common_remove">Verwijderen</string>
- <string name="confirmation_remove_alert">Wilt u %1$s werkelijk verwijderen?</string>
+ <string name="confirmation_remove_file_alert">Wilt u %1$s werkelijk verwijderen?</string>
<string name="confirmation_remove_folder_alert">Wilt u %1$s en de inhoud ervan werkelijk verwijderen?</string>
<string name="confirmation_remove_local">Alleen lokaal</string>
- <string name="confirmation_remove_folder_local">Alleen lokale inhoud </string>
- <string name="confirmation_remove_remote">Verwijder van server</string>
- <string name="confirmation_remove_remote_and_local">Lokaal en op de server</string>
+ <string name="confirmation_remove_folder_local">Alleen lokaal</string>
+ <string name="confirmation_remove_file_remote">Van server</string>
+ <string name="confirmation_remove_remote_and_local">Extern & lokaal</string>
<string name="remove_success_msg">Succesvol verwijderd</string>
<string name="remove_fail_msg">Verwijdering kon niet voltooid worden</string>
<string name="rename_dialog_title">Voer een nieuwe naam in</string>
<string name="ssl_validator_label_validity_to">Aan:</string>
<string name="ssl_validator_label_signature">Handtekening:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritme:</string>
+ <string name="digest_algorithm_not_available">Dit digest algoritme is niet beschikbaar op uw telefoon.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Vingerafdruk:</string>
+ <string name="certificate_load_problem">Er is een probleem met het laden van het certificaat.</string>
<string name="ssl_validator_null_cert">Het certificaat kon niet worden getoond.</string>
<string name="ssl_validator_no_info_about_error">- Geen informatie over de fout</string>
<string name="placeholder_sentence">Dit is een plaatshouder</string>
<string name="conflict_title">Bestandsconflict</string>
<string name="conflict_message">Welke bestanden wilt u bewaren? Als u beide versies selecteert zal het lokale bestand een nummer aan de naam toegevoegd krijgen.</string>
<string name="conflict_keep_both">Beide bewaren</string>
- <string name="conflict_use_local_version">Gebruik de lokale versie</string>
- <string name="conflict_use_server_version">Gebruik de server-versie</string>
+ <string name="conflict_use_local_version">lokale versie</string>
+ <string name="conflict_use_server_version">serverversie</string>
<string name="preview_image_description">Afbeelding voorbeeld</string>
<string name="preview_image_error_unknown_format">Deze afbeelding kan niet worden getoond</string>
<string name="error__upload__local_file_not_copied">%1$s kon niet worden gekopieerd naar de %2$s lokale map</string>
<string name="share_link_file_error">Er trad een fout op bij uw poging dit bestand of deze map te delen</string>
<string name="unshare_link_file_no_exist">Kan delen niet beëindigen. Ga na of het bestand bestaat</string>
<string name="unshare_link_file_error">Er trad een fout op bij uw poging het delen van dit bestand of deze map te beëindigen</string>
+ <string name="update_link_file_no_exist">Kan niet bijwerken. Ga na of het bestand bestaat</string>
+ <string name="update_link_file_error">Er trad een fout op bij uw poging deze gedeelde link bij te werken</string>
<string name="share_link_password_title">Vul het wachtwoord in</string>
<string name="share_link_empty_password">U moet een wachtwoord opgeven</string>
<string name="activity_chooser_send_file_title">Versturen</string>
<string name="forbidden_permissions_delete">om dit bestand te verwijderen</string>
<string name="share_link_forbidden_permissions">om dit bestand te delen</string>
<string name="unshare_link_forbidden_permissions">om dit bestand niet meer te delen</string>
+ <string name="update_link_forbidden_permissions">deze gedeelde link bij te werken</string>
<string name="forbidden_permissions_create">om dit bestand te creëren</string>
<string name="uploader_upload_forbidden_permissions">om dit bestand in deze map te uploaden</string>
<string name="downloader_download_file_not_found">Dit bestand is niet langer beschikbaar op de server</string>
<string name="prefs_category_accounts">Accounts</string>
<string name="prefs_add_account">Toevoegen account</string>
- <string name="auth_redirect_non_secure_connection_title">De beveiligde verbinding is omgeleid naar een onveilige route.</string>
+ <string name="auth_redirect_non_secure_connection_title">De beveiligde verbinding is omgeleid via een onveilige route.</string>
<string name="actionbar_logger">Logs</string>
<string name="log_send_history_button">Verstuur geschiedenis</string>
<string name="log_send_no_mail_app">Geen app voor versturen van logs gevonden. Installeer de mail app!</string>
<string name="log_progress_dialog_text">Laden data...</string>
<string name="saml_authentication_required_text">Authenticatie vereist</string>
<string name="saml_authentication_wrong_pass">Onjuist wachtwoord</string>
- <string name="actionbar_move">verplaatsen</string>
+ <string name="actionbar_move">Verplaatsen</string>
<string name="file_list_empty_moving">Niets hier. U kunt een map toevoegen!</string>
<string name="folder_picker_choose_button_text">Kies</string>
<string name="move_file_not_found">Kan niet verplaatsen. Ga na of het bestand wel bestaat</string>
<string name="move_file_invalid_overwrite">Het bestand bestaat al in de doelmap</string>
<string name="move_file_error">Er trad een fout op bij uw poging dit bestand of deze map te verplaatsen</string>
<string name="forbidden_permissions_move">om dit bestand te verplaatsen</string>
+ <string name="copy_file_not_found">Kan niet kopiëren. Ga na of het bestand wel bestaat</string>
+ <string name="copy_file_invalid_into_descendent">De map kan niet naar een onderliggende map worden gekopieerd</string>
+ <string name="copy_file_invalid_overwrite">Het bestand bestaat al in de doelmap</string>
+ <string name="copy_file_error">Er trad een fout op bij uw poging dit bestand of deze map te kopiëren</string>
+ <string name="forbidden_permissions_copy">om dit bestand te kopiëren</string>
<string name="prefs_category_instant_uploading">Directe uploads</string>
<string name="prefs_category_security">Beveiliging</string>
<string name="prefs_instant_video_upload_path_title">Upload Video Pad</string>
- <string name="download_folder_failed_content">Download van %1$s map kon niet worden voltooid</string>
+ <string name="sync_folder_failed_content">Synchronisatie van map %1$s kon niet worden voltooid</string>
<string name="shared_subject_header">gedeeld</string>
<string name="with_you_subject_header">met u</string>
- <string name="subject_token">%1$s deelde \"%2$s\" met u</string>
- <string name="saml_subject_token">\"%1$s\" is gedeeld met u</string>
+ <string name="subject_user_shared_with_you">%1$s deelde \"%2$s\" met u</string>
+ <string name="subject_shared_with_you">\"%1$s\" is gedeeld met u</string>
<string name="auth_refresh_button">Verversen verbinding</string>
<string name="auth_host_address">Serveradres</string>
<string name="common_error_out_memory">Niet voldoende geheugen</string>
<string name="file_list__footer__files">%1$d bestanden</string>
<string name="file_list__footer__files_and_folder">%1$d bestanden, 1 map</string>
<string name="file_list__footer__files_and_folders">%1$d bestanden, %2$d mappen</string>
+ <string name="share_dialog_title">Delen</string>
+ <string name="share_with_user_section_title">Delen met gebruikers en groepen</string>
+ <string name="share_no_users">Nog geen gegevens met gebruikers gedeeld</string>
+ <string name="share_add_user_or_group">Toevoegen gebruiker of groep</string>
+ <string name="share_via_link_section_title">Deel link</string>
+ <string name="share_via_link_expiration_date_label">Stel vervaldatum in</string>
+ <string name="share_via_link_password_label">Wachtwoord beveiligd</string>
+ <string name="share_via_link_password_title">Beveiligd</string>
+ <string name="share_get_public_link_button">Ophalen link</string>
+ <string name="share_search">Zoeken</string>
+ <string name="search_users_and_groups_hint">Zoeken naar gebruikers en groepen</string>
+ <string name="share_group_clarification">%1$s (groep)</string>
+ <string name="share_sharee_unavailable">Sorry, uw serverversie staat niet toe om binnen de clients te delen met gebruikers.
+Neem contact op met uw beheerder</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Opna</string>
<string name="prefs_category_general">Generelt</string>
<string name="prefs_category_more">Meir</string>
<string name="prefs_accounts">Kontoar</string>
<string name="filedetails_created">Oppretta:</string>
<string name="filedetails_modified">Endra:</string>
<string name="filedetails_download">Last ned</string>
- <string name="action_share_file">Del lenkje</string>
+ <string name="action_share">Del</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nei</string>
<string name="common_ok">Greitt</string>
- <string name="common_cancel_download">Avbryt nedlasting</string>
- <string name="common_cancel_upload">Avbryt opplasting</string>
<string name="common_cancel">Avbryt</string>
<string name="common_save_exit">Lagra & avslutt</string>
<string name="common_error">Feil</string>
<string name="common_rename">Endra namn</string>
<string name="common_remove">Fjern</string>
<string name="confirmation_remove_local">Berre lokalt</string>
- <string name="confirmation_remove_remote">Fjern frå tenaren</string>
- <string name="confirmation_remove_remote_and_local">Ekstern og lokal</string>
+ <string name="confirmation_remove_folder_local">Berre lokalt</string>
<string name="remove_success_msg">Fjerning vellukka</string>
<string name="remove_fail_msg">Fjerning mislukka</string>
<string name="rename_server_fail_msg">Klarte ikkje å fullføra omdøyping</string>
<string name="folder_picker_choose_button_text">Vel</string>
<string name="prefs_category_security">Tryggleik</string>
<string name="auth_host_address">Tenaradresse</string>
+ <string name="share_dialog_title">Deling</string>
+ <string name="share_via_link_section_title">Del lenkje</string>
+ <string name="share_via_link_expiration_date_label">Set utløpsdato</string>
+ <string name="share_via_link_password_label">Passordvern</string>
+ <string name="share_search">Søk</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
+ <string name="about_android">%1$s Android App</string>
<string name="about_version">version %1$s</string>
- <string name="actionbar_upload">Amontcarga</string>
+ <string name="actionbar_sync">Actualizar lo compte</string>
+ <string name="actionbar_upload">Mandar</string>
+ <string name="actionbar_upload_from_apps">Contengut d\'autras aplicacions</string>
<string name="actionbar_upload_files">Fichièrs</string>
- <string name="actionbar_mkdir">Novèl dorsièr</string>
- <string name="actionbar_settings">Configuracion</string>
+ <string name="actionbar_open_with">Dobrir amb</string>
+ <string name="actionbar_mkdir">Dorsièr novèl</string>
+ <string name="actionbar_settings">Paramètres</string>
+ <string name="actionbar_see_details">Detalhs</string>
<string name="actionbar_send_file">Mandar</string>
+ <string name="actionbar_sort">Triar</string>
+ <string name="actionbar_sort_title">Triar</string>
+ <string-array name="actionbar_sortby">
+ <item>per òrdre alfabetic</item>
+ <item>del mai recent al pus ancian</item>
+ </string-array>
<!--TODO re-enable when server-side folder size calculation is available
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Totes los fichièrs</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
<string name="drawer_item_settings">Paramètres</string>
+ <string name="drawer_item_logs">Logs</string>
+ <string name="drawer_close">Tampar</string>
+ <string name="drawer_open">Dobrir</string>
<string name="prefs_category_general">General</string>
- <string name="prefs_category_more">Mai d\'aquò</string>
+ <string name="prefs_category_more">Mai</string>
<string name="prefs_accounts">Comptes</string>
- <string name="prefs_manage_accounts">Maneja comptes</string>
+ <string name="prefs_manage_accounts">Gestion dels comptes</string>
+ <string name="prefs_passcode">Còde de seguretat</string>
+ <string name="prefs_instant_upload">Mandadís immediat de las fòtos</string>
+ <string name="prefs_instant_upload_summary">Mandar immediatament las fòtos presas per la camèra</string>
+ <string name="prefs_instant_video_upload">Mandadís immediat de las vidèos</string>
+ <string name="prefs_instant_video_upload_summary">Mandar immediatament las vidèos presas per la camèra</string>
+ <string name="prefs_log_title">Activar los logs</string>
+ <string name="prefs_log_summary">Utilizat per enregistrar los problèmas dins los logs</string>
+ <string name="prefs_log_title_history">Istoric dels logs</string>
+ <string name="prefs_log_summary_history">Aquò aficha los logs enregistrats</string>
+ <string name="prefs_log_delete_history_button">Suprimir l\'istoric</string>
<string name="prefs_help">Ajuda</string>
- <string name="prefs_imprint">Mencions legalas</string>
- <string name="auth_username">Nom d\'usancièr</string>
+ <string name="prefs_recommend">Recomandar a un amis</string>
+ <string name="prefs_feedback">Comentaris</string>
+ <string name="prefs_imprint">Mencions</string>
+ <string name="prefs_remember_last_share_location">Memorizar l\'emplaçament de partiment</string>
+ <string name="prefs_remember_last_upload_location_summary">Memorizar lo darrièr emplaçament de mandadís</string>
+ <string name="recommend_subject">Ensajatz %1$s sus vòstre smartphone !</string>
+ <string name="recommend_text">M\'agradariá de vos convidar a utilizar %1$s sus vòstre smartphone !
+Telecargatz-lo aicí : %2$s</string>
+ <string name="auth_check_server">Verificar lo servidor</string>
+ <string name="auth_host_url">Adreça del servidor https://…</string>
+ <string name="auth_username">Nom d\'utilizaire</string>
<string name="auth_password">Senhal</string>
+ <string name="auth_register">Novèl dins %1$s ?</string>
<string name="sync_string_files">Fichièrs</string>
- <string name="setup_btn_connect">Connecta</string>
- <string name="uploader_btn_upload_text">Amontcarga</string>
- <string name="uploader_btn_new_folder_text">Novèl dorsièr</string>
- <string name="uploader_wrn_no_account_title">Cap de compte trobat</string>
+ <string name="setup_btn_connect">Connectar</string>
+ <string name="uploader_btn_upload_text">Mandar</string>
+ <string name="uploader_btn_new_folder_text">Dorsièr novèl</string>
+ <string name="uploader_top_message">Seleccionar lo dorsièr de mandadís :</string>
+ <string name="uploader_wrn_no_account_title">Cap de compte es pas estat trobat</string>
+ <string name="uploader_wrn_no_account_text">Cap de compte %1$s es pas estat trobat. Començar per ne configurar un.</string>
<string name="uploader_wrn_no_account_setup_btn_text">Configuracion</string>
- <string name="uploader_wrn_no_account_quit_btn_text">Quita</string>
- <string name="uploader_info_uploading">Al amontcargar</string>
- <string name="file_list_seconds_ago">segonda a</string>
- <string name="file_list_empty">Pas res dedins. Amontcarga qualquaren</string>
+ <string name="uploader_wrn_no_account_quit_btn_text">Quitar</string>
+ <string name="uploader_wrn_no_content_title">Pas res a mandar</string>
+ <string name="uploader_wrn_no_content_text">Cap de contengut pas recebut. Pas res a mandar.</string>
+ <string name="uploader_error_forbidden_content">%1$s es pas autorizat a accedir al contengut partejat</string>
+ <string name="uploader_info_uploading">Mandadís...</string>
+ <string name="file_list_seconds_ago">i a qualques segondas</string>
+ <string name="file_list_empty">I a pas res aicí ! Mandatz doncas quicòm :)</string>
+ <string name="file_list_loading">Cargament...</string>
+ <string name="file_list_no_app_for_file_type">Cap d\'aplicacion pas trobada per aqueste tipe de fichièr !</string>
+ <string name="local_file_list_empty">Cap de fichièr es pas present dins aqueste dorsièr.</string>
+ <string name="filedetails_select_file">Quichatz sus un fichièr per afichar las informacions suplementàrias</string>
<string name="filedetails_size">Talha :</string>
<string name="filedetails_type">Tipe :</string>
- <string name="filedetails_created">Creat :</string>
- <string name="filedetails_modified">Modificat :</string>
- <string name="filedetails_download">Avalcarga</string>
- <string name="action_share_file">Partiment per ligam</string>
+ <string name="filedetails_created">Creat lo :</string>
+ <string name="filedetails_modified">Modificat lo :</string>
+ <string name="filedetails_download">Telecargar</string>
+ <string name="filedetails_sync_file">Sincronizar</string>
+ <string name="filedetails_renamed_in_upload_msg">Lo fichièr es estat renomenat en %s pendent lo mandadís</string>
+ <string name="list_layout">Afichatge en lista</string>
+ <string name="action_share">Partejar</string>
<string name="common_yes">Òc</string>
<string name="common_no">Non</string>
- <string name="common_ok">D\'accòrdi</string>
- <string name="common_cancel_upload"> Anulla l\'amontcargar</string>
- <string name="common_cancel">Annula</string>
+ <string name="common_ok">D\'acòrdi</string>
+ <string name="common_cancel_sync">Anullar la sincronizacion</string>
+ <string name="common_cancel">Anullar</string>
+ <string name="common_save_exit">Salvar & Quitar</string>
<string name="common_error">Error</string>
- <string name="common_error_unknown">Error Desconeguda </string>
- <string name="about_title">A prepaus</string>
- <string name="change_password">Cambia lo senhal</string>
- <string name="delete_account">Escafa lo compte</string>
- <string name="create_account">Crea un compte</string>
- <string name="upload_chooser_title">Avalcarga dempuèi ...</string>
+ <string name="common_loading">Cargament…</string>
+ <string name="common_error_unknown">Error desconeguda </string>
+ <string name="about_title">A prepaus de</string>
+ <string name="change_password">Cambiar de senhal</string>
+ <string name="delete_account">Suprimir aqueste compte</string>
+ <string name="create_account">Crear un compte</string>
+ <string name="upload_chooser_title">Mandar un fichièr dempuèi…</string>
<string name="uploader_info_dirname">Nom del dorsièr</string>
- <string name="uploader_upload_in_progress_ticker">Al avalcargar ...</string>
- <string name="uploader_upload_succeeded_ticker">Capitada d\'avalcargar</string>
- <string name="common_choose_account">Causís lo compte</string>
+ <string name="uploader_upload_in_progress_ticker">Mandadís…</string>
+ <string name="uploader_upload_in_progress_content">Mandadís del fichièr %2$s : %1$d%% efectuats</string>
+ <string name="uploader_upload_succeeded_ticker">Mandadís capitat</string>
+ <string name="uploader_upload_succeeded_content_single">Lo fichièr %1$s es estat mandat amb succès</string>
+ <string name="uploader_upload_failed_ticker">Fracàs del mandadís</string>
+ <string name="uploader_upload_failed_content_single">Lo mandadís de %1$s a fracassat</string>
+ <string name="uploader_upload_failed_credentials_error">Lo mandadís a fracassat, vos cal vos connectar tornamai</string>
+ <string name="downloader_download_in_progress_ticker">Telecargament en cors…</string>
+ <string name="downloader_download_in_progress_content">Telecargament en cors de %2$s, %1$d%% efectuats</string>
+ <string name="downloader_download_succeeded_ticker">Telecargament capitat</string>
+ <string name="downloader_download_succeeded_content">%1$s es estat telecargat amb succès</string>
+ <string name="downloader_download_failed_ticker">Lo telecargament a fracassat</string>
+ <string name="downloader_download_failed_content">Lo telecargament de %1$s a fracassat</string>
+ <string name="downloader_not_downloaded_yet">Pas encara telecargat</string>
+ <string name="downloader_download_failed_credentials_error">Lo telecargament a fracassat, vos cal vos connectar tornamai</string>
+ <string name="common_choose_account">Causissètz un compte</string>
+ <string name="sync_fail_ticker">La sincronizacion a fracassat</string>
+ <string name="sync_fail_ticker_unauthorized">Fracàs de la sincronizacion, vos cal vos reconnectar</string>
+ <string name="sync_fail_content">La sincronizacion de %1$s a pas pogut èsser acabada</string>
+ <string name="sync_fail_content_unauthorized">Senhal invalid per %1$s</string>
+ <string name="sync_conflicts_in_favourites_ticker">De conflictes son estats trobats</string>
+ <string name="sync_conflicts_in_favourites_content">%1$d fichièrs de gardar sincronizats an pas pogut èsser sincronizats</string>
+ <string name="sync_fail_in_favourites_ticker">La sincronizacion dels fichièrs a fracassat</string>
+ <string name="sync_fail_in_favourites_content">Lo contengut de %1$d fichièrs a pas pogut èsser sincronizat (%2$d conflictes)</string>
+ <string name="sync_foreign_files_forgotten_ticker">Certans fichièrs locals son estats doblidats</string>
+ <string name="sync_foreign_files_forgotten_content">%1$d fichièrs del dorsièr %2$s an pas pogut èsser copiats dins</string>
+ <string name="sync_foreign_files_forgotten_explanation">Dempuèi la version 1.3.16, los fichièrs mandats dempuèi aqueste aparelh son copiats dins lo dorsièr local %1$s per evitar una pèrda de donadas quand un meteis fichièr es sincronizat amb mantun compte.
+
+En rason d\'aquesta modificacion, totes los fichièrs mandats amb de versions anterioras d\'aquesta aplicacion son estats copiats dins lo dorsièr %2$s. Pasmens, una error a empachat l\'acabament d\'aquesta operacion pendent la sincronizacion del compte. Podètz siá daissar los fichièrs tals coma son e suprimir lo ligam cap a %3$s, siá desplaçar los fichièrs dins lo dorsièr %1$s e gardar lo ligam cap a %4$s.
+
+Çaijós la lista dels fichièrs locals, e los fichièrs distants dins %5$s als quals èran ligats.</string>
+ <string name="sync_current_folder_was_removed">Lo dorsièr %1$s existís pas mai</string>
+ <string name="foreign_files_move">Desplaçar tot</string>
+ <string name="foreign_files_success">Totes los fichièrs son estats desplaçats</string>
+ <string name="foreign_files_fail">Certans fichièrs an pas pogut èsser desplaçats</string>
+ <string name="foreign_files_local_text">Local : %1$s</string>
+ <string name="foreign_files_remote_text">Distant : %1$s</string>
+ <string name="upload_query_move_foreign_files">I a pas pro de plaça disponibla per copiar los fichièrs seleccionats dins lo dorsièr %1$s. Volètz los desplaçar a la plaça ?</string>
+ <string name="pass_code_enter_pass_code">Sasissètz vòstre còde de seguretat</string>
+ <string name="pass_code_configure_your_pass_code">Sasissètz vòstre còde de seguretat</string>
+ <string name="pass_code_configure_your_pass_code_explanation">Lo còde de seguretat serà demandat a cada dobertura de l\'aplicacion</string>
+ <string name="pass_code_reenter_your_pass_code">Sasissètz tornamai vòstre còde de seguretat</string>
+ <string name="pass_code_remove_your_pass_code">Suprimir vòstre còde de seguretat</string>
+ <string name="pass_code_mismatch">Los còdes de seguretat son pas identics</string>
+ <string name="pass_code_wrong">Còde de seguretat incorrècte</string>
+ <string name="pass_code_removed">Còde de seguretat suprimit</string>
+ <string name="pass_code_stored">Còde de seguretat enregistrat</string>
+ <string name="media_notif_ticker">%1$s lector de musica</string>
+ <string name="media_state_playing">%1$s (lectura)</string>
+ <string name="media_state_loading">%1$s (cargament)</string>
+ <string name="media_event_done">Lectura de %1$s acabada</string>
+ <string name="media_err_nothing_to_play">Fichièr mèdia introbable </string>
+ <string name="media_err_no_account">Cap de compte es pas estat trobat</string>
+ <string name="media_err_not_in_owncloud">Lo fichièr es pas dins un compte valid</string>
+ <string name="media_err_unsupported">Lo codec d\'aqueste mèdia es pas pres en carga </string>
+ <string name="media_err_io">Lo fichièr mèdia pòt pas èsser legit</string>
+ <string name="media_err_malformed">Lo fichièr mèdia es pas corrèctament encodat</string>
+ <string name="media_err_timeout">Relambi depassat per la lectura del tròç</string>
+ <string name="media_err_invalid_progressive_playback">Lo fichièr mèdia pòt pas èsser difusat</string>
+ <string name="media_err_unknown">Lo fichièr mèdia pòt pas èsser jogat amb lo lector estandard</string>
+ <string name="media_err_security_ex">Error de seguretat a la lectura de %1$s</string>
+ <string name="media_err_io_ex">Error de lectura de fichièr a la lectura de %1$s</string>
+ <string name="media_err_unexpected">Error imprevista a la lectura de %1$s </string>
+ <string name="media_rewind_description">Boton de rembobinatge</string>
+ <string name="media_play_pause_description">Boton de lectura o de pausa</string>
+ <string name="media_forward_description">Boton d\'avança rapida</string>
+ <string name="auth_getting_authorization">Demanda d\'autorizacion…</string>
+ <string name="auth_trying_to_login">Temptativa de connexion…</string>
+ <string name="auth_no_net_conn_title">Pas de connexion ret</string>
+ <string name="auth_nossl_plain_ok_title">Connexion securizada pas disponibla</string>
+ <string name="auth_connection_established">Connexion establida</string>
+ <string name="auth_testing_connection">Tèst de connexion</string>
+ <string name="auth_not_configured_title">Configuracion del servidor erronèa</string>
+ <string name="auth_account_not_new">Un compte pels meteisses utilizaire e servidor existís ja sus aqueste aparelh</string>
+ <string name="auth_account_not_the_same">L\'utilizaire entrat correspond pas a l\'utilizaire d\'aqueste compte</string>
+ <string name="auth_unknown_error_title">Una error desconeguda s\'es produsida.</string>
+ <string name="auth_unknown_host_title">Impossible de trobar l\'òste</string>
+ <string name="auth_incorrect_path_title">Cap d\'instància del servidor es pas estada trobada</string>
+ <string name="auth_timeout_title">Lo servidor a pres tròp de temps a respondre</string>
+ <string name="auth_incorrect_address_title">Adreça invalida</string>
+ <string name="auth_ssl_general_error_title">Fracàs de l\'inicializacion SSL</string>
+ <string name="auth_ssl_unverified_server_title">Impossible de verificar l\'identitat del servidor SSL</string>
+ <string name="auth_bad_oc_version_title">La version del servidor es pas reconeguda</string>
+ <string name="auth_wrong_connection_title">Impossible d\'establir la connexion</string>
+ <string name="auth_secure_connection">Connexion securizada establida</string>
+ <string name="auth_unauthorized">Nom d\'utilizaire o senhal incorrècte</string>
+ <string name="auth_oauth_error">Fracàs d\'autorizacion</string>
+ <string name="auth_oauth_error_access_denied">Accès refusat pel servidor d\'autorizacion</string>
+ <string name="auth_wtf_reenter_URL">Estat imprevist ; sasissètz tornamai l\'URL del servidor</string>
+ <string name="auth_expired_oauth_token_toast">Vòstra autorizacion a expirat. Mercé de vos autentificar tornamai</string>
+ <string name="auth_expired_basic_auth_toast">Sasissètz lo senhal corrent</string>
+ <string name="auth_expired_saml_sso_token_toast">Vòstra session a expirat. Mercé de vos reconnectar</string>
+ <string name="auth_connecting_auth_server">Connexion al servidor d\'autentificacion…</string>
+ <string name="auth_unsupported_auth_method">Lo servidor pren pas en carga pas aqueste metòde d\'autentificacion</string>
+ <string name="auth_unsupported_multiaccount">%1$s pren pas en carga los comptes multiples</string>
+ <string name="auth_fail_get_user_name">Vòstre servidor a tornat un identificant d\'utilizaire incorrècte. Prenètz contacte amb vòstre administrator
+</string>
+ <string name="auth_can_not_auth_against_server">Impossible de s\'autentificar sus aqueste servidor</string>
+ <string name="auth_account_does_not_exist">Lo compte existís pas encara sus aqueste periferic</string>
<string name="favorite">Apondre als favorits</string>
- <string name="common_rename">Torna nomenar</string>
+ <string name="unfavorite">Suprimir dels favorits</string>
+ <string name="common_rename">Renomenar</string>
<string name="common_remove">Suprimir</string>
+ <string name="confirmation_remove_file_alert">Sètz segur que volètz suprimir %1$s ?</string>
+ <string name="confirmation_remove_folder_alert">Sètz segur que volètz suprimir %1$s e son contengut ?</string>
+ <string name="confirmation_remove_local">Local solament</string>
+ <string name="confirmation_remove_folder_local">Local solament</string>
+ <string name="confirmation_remove_file_remote">Dempuèi lo servidor</string>
+ <string name="confirmation_remove_remote_and_local">Distant & local</string>
+ <string name="remove_success_msg">Supression efectuada amb succès</string>
+ <string name="remove_fail_msg">Supression impossibla</string>
+ <string name="rename_dialog_title">Entratz un nom novèl</string>
+ <string name="rename_local_fail_msg">La version locala pòt pas èsser renomenada, reensajatz amb un nom diferent</string>
+ <string name="rename_server_fail_msg">Cambiament de nom impossible</string>
+ <string name="sync_file_fail_msg">Lo fichièr distant a pas pogut èsser verificat</string>
+ <string name="sync_file_nothing_to_do_msg">Lo contengut del fichièr es ja sincronizat</string>
+ <string name="create_dir_fail_msg">Lo dorsièr a pas pogut èsser creat</string>
+ <string name="filename_forbidden_characters">Caractèrs interdiches : / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">Lo nom de fichièr conten al mens un caractèr invalid</string>
+ <string name="filename_empty">Lo nom del fichièr pòt pas èsser void</string>
+ <string name="wait_a_moment">Pacientatz</string>
+ <string name="filedisplay_unexpected_bad_get_content">Problèma imprevist. Ensajatz una autra aplicacion per la seleccion del fichièr</string>
+ <string name="filedisplay_no_file_selected">Cap de fichièr pas seleccionat</string>
+ <string name="activity_chooser_title">Mandar lo ligam cap a…</string>
+ <string name="wait_for_tmp_copy_from_private_storage">Còpia del fichièr dempuèi l\'emmagazinatge privat</string>
+ <string name="oauth_check_onoff">Connexion amb oAuth2</string>
+ <string name="oauth_login_connection">Connexion al servidor oAuth2…</string>
+ <string name="ssl_validator_header">L\'identitat del site pòt pas èsser verificada</string>
+ <string name="ssl_validator_reason_cert_not_trusted">- Lo certificat del servidor es pas segur</string>
+ <string name="ssl_validator_reason_cert_expired">- Lo certificat del servidor a expirat</string>
+ <string name="ssl_validator_reason_cert_not_yet_valid">- Lo certificat del servidor es pas encara valid</string>
+ <string name="ssl_validator_reason_hostname_not_verified">- L\'URL correspond pas al nom d\'òste del certificat</string>
+ <string name="ssl_validator_question">Vos volètz fisaz d\'aqueste certificat malgrat tot ?</string>
+ <string name="ssl_validator_not_saved">Impossible de salvar lo certificat</string>
+ <string name="ssl_validator_btn_details_see">Detalhs</string>
+ <string name="ssl_validator_btn_details_hide">Amagar</string>
+ <string name="ssl_validator_label_subject">Desliurat a :</string>
+ <string name="ssl_validator_label_issuer">Desliurat per :</string>
+ <string name="ssl_validator_label_CN">Nom d\'usatge :</string>
+ <string name="ssl_validator_label_O">Organizacion :</string>
+ <string name="ssl_validator_label_OU">Unitat organizacionala :</string>
<string name="ssl_validator_label_C">País :</string>
+ <string name="ssl_validator_label_ST">Region :</string>
+ <string name="ssl_validator_label_L">Localizacion :</string>
+ <string name="ssl_validator_label_validity">Validitat :</string>
+ <string name="ssl_validator_label_validity_from">Del :</string>
+ <string name="ssl_validator_label_validity_to">Al :</string>
+ <string name="ssl_validator_label_signature">Signatura :</string>
+ <string name="ssl_validator_label_signature_algorithm">Algoritme :</string>
+ <string name="ssl_validator_null_cert">Impossible d\'afichar lo certificat.</string>
+ <string name="ssl_validator_no_info_about_error">- Pas cap d\'informacion sus l\'error</string>
+ <string name="placeholder_sentence">Aquò es un espaci reservat</string>
+ <string name="placeholder_filename">placeholder.txt</string>
+ <string name="placeholder_filetype">Imatge PNG</string>
+ <string name="placeholder_filesize">389 Ko</string>
+ <string name="placeholder_timestamp">18/05/2012 12:23</string>
+ <string name="placeholder_media_time">12:23:45</string>
+ <string name="instant_upload_on_wifi">Mandar los imatges via una connexion WiFi unicament</string>
+ <string name="instant_video_upload_on_wifi">Mandar las vidèos via una connexion WiFi unicament</string>
+ <string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Conflicte de fichièrs</string>
+ <string name="conflict_message">Quin(s) fichièr(s) volètz gardar ? Se seleccionatz los dos, una chifra serà aponduda al nom del fichièr local.</string>
+ <string name="conflict_keep_both">Gardar las doas versions</string>
+ <string name="conflict_use_local_version">version locala</string>
+ <string name="conflict_use_server_version">version servidor</string>
+ <string name="preview_image_description">Previsualizacion de l\'imatge</string>
+ <string name="preview_image_error_unknown_format">Aqueste imatge pòt pas èsser afichada</string>
+ <string name="error__upload__local_file_not_copied">%1$s a pas pogut èsser copiat dins lo dorsièr local %2$s</string>
+ <string name="prefs_instant_upload_path_title">Repertòri de mandadís</string>
+ <string name="share_link_no_support_share_api">O planhèm, lo partiment es pas disponible sus vòstre servidor. Contactatz vòstre administrator.</string>
+ <string name="share_link_file_no_exist">Impossible de partejar. Verificatz que lo fichièr es plan present</string>
+ <string name="share_link_file_error">Una error s\'es produsida al moment de la tentative de partiment d\'aqueste fichièr o repertòri</string>
+ <string name="unshare_link_file_no_exist">Impossible de suprimir lo partiment. Verificatz que lo fichièr es ben present</string>
+ <string name="unshare_link_file_error">Una error s\'es produsida al moment de la temptativa d’anullacion del partiment d\'aqueste fichièr o repertòri</string>
+ <string name="share_link_password_title">Sasissètz un senhal</string>
+ <string name="share_link_empty_password">Vos cal sasir un senhal</string>
<string name="activity_chooser_send_file_title">Mandar</string>
+ <string name="copy_link">Copiar lo ligam</string>
<string name="clipboard_text_copied">Copiat dins lo quichapapièrs</string>
+ <string name="error_cant_bind_to_operations_service">Error critica : impossible de realizar d\'operacions</string>
+ <string name="network_error_socket_exception">Una error s\'es produsida pendent la connexion al servidor.</string>
+ <string name="network_error_socket_timeout_exception">Una error s\'es produsida pendent l\'espèra del servidor. L\'operacion a pas pogut èsser efectuada</string>
+ <string name="network_error_connect_timeout_exception">Una error s\'es produsida pendent l\'espèra del servidor. L\'operacion a pas pogut èsser efectuada</string>
+ <string name="network_host_not_available">L\'operacion a pas pogut èsser acabada, lo servidor es pas disponible</string>
<string name="empty"></string>
+ <string name="forbidden_permissions">Avètz pas la permission %s</string>
+ <string name="forbidden_permissions_rename">de renomenar aqueste fichièr</string>
+ <string name="forbidden_permissions_delete">d’escafar aqueste fichièr</string>
+ <string name="share_link_forbidden_permissions">per fin de partejar aqueste fichièr</string>
+ <string name="unshare_link_forbidden_permissions">per fin de partejar pas mai aqueste fichièr</string>
+ <string name="forbidden_permissions_create">de crear aqueste fichièr</string>
+ <string name="uploader_upload_forbidden_permissions">per fin d’importar dins aqueste repertòri</string>
+ <string name="downloader_download_file_not_found">Aqueste fichièr es pas mai disponible sul servidor</string>
<string name="prefs_category_accounts">Comptes</string>
+ <string name="prefs_add_account">Apondre un compte</string>
+ <string name="auth_redirect_non_secure_connection_title">La connexion securizada es redirigida cap a una rota non-securizada.</string>
+ <string name="actionbar_logger">Jornals</string>
+ <string name="log_send_history_button">Mandar l\'istoric</string>
+ <string name="log_send_no_mail_app">Cap d\'aplicacion pas trobada pel mandadís de jornals. Installar una aplicacion de corrièl !</string>
+ <string name="log_send_mail_subject">Jornals de l\'aplicacion Android %1$s</string>
+ <string name="log_progress_dialog_text">Cargament de las donadas…</string>
<string name="saml_authentication_required_text">Autentificacion requesida</string>
<string name="saml_authentication_wrong_pass">Senhal incorrècte</string>
- <string name="folder_picker_choose_button_text">Causís</string>
+ <string name="actionbar_move">Desplaçar</string>
+ <string name="file_list_empty_moving">I a pas res aicí. Podètz apondre un dorsièr !</string>
+ <string name="folder_picker_choose_button_text">Causir</string>
+ <string name="move_file_not_found">Impossible de desplaçar. Verificatz que lo fichièr existís</string>
+ <string name="move_file_invalid_into_descendent">Es pas possible de desplaçar un dorsièr cap a un de sos descendents</string>
+ <string name="move_file_invalid_overwrite">Lo fichièr existís ja dins lo dorsièr de destinacion</string>
+ <string name="move_file_error">Una error s\'es produsida al moment de la temptativa de desplaçament d\'aqueste fichièr o dorsièr</string>
+ <string name="forbidden_permissions_move">de desplaçar aqueste fichièr</string>
+ <string name="copy_file_not_found">Impossible de copiar. Verificatz que lo fichièr existís</string>
+ <string name="copy_file_invalid_into_descendent">Es pas possible de copiar un dorsièr cap a un de sos descendents</string>
+ <string name="copy_file_invalid_overwrite">Fichièr ja existent dins lo dorsièr de destinacion</string>
+ <string name="copy_file_error">Una error s\'es produsida al moment de la còpia d\'aqueste fichièr o dorsièr</string>
+ <string name="forbidden_permissions_copy">de copiar aqueste fichièr</string>
+ <string name="prefs_category_instant_uploading">Mandadís immediat</string>
+ <string name="prefs_category_security">Seguretat</string>
+ <string name="prefs_instant_video_upload_path_title">Repertòri de mandadís de las vidèos</string>
+ <string name="sync_folder_failed_content">La sincronizacion del dorsièr %1$s a pas pogut èsser acabad</string>
+ <string name="shared_subject_header">a partejat</string>
+ <string name="with_you_subject_header">amb vos</string>
+ <string name="subject_user_shared_with_you">%1$s a partejat \"%2$s\" amb vos</string>
+ <string name="subject_shared_with_you">\"%1$s\" es estat partejat amb vos</string>
+ <string name="auth_refresh_button">Actualizar la connexion</string>
<string name="auth_host_address">Adreça del servidor</string>
+ <string name="common_error_out_memory">Memòria insufisenta</string>
<string name="username">Nom d\'utilizaire</string>
+ <string name="file_list__footer__folder">1 dorsièr</string>
+ <string name="file_list__footer__folders">%1$d dorsièrs</string>
+ <string name="file_list__footer__file">1 fichièr</string>
+ <string name="file_list__footer__file_and_folder">1 fichièr, 1 dorsièr</string>
+ <string name="file_list__footer__file_and_folders">1 fichièr, %1$d dorsièrs</string>
+ <string name="file_list__footer__files">%1$d fichièrs</string>
+ <string name="file_list__footer__files_and_folder">%1$d fichièrs, 1 dorsièr</string>
+ <string name="file_list__footer__files_and_folders">%1$d fichièrs, %2$d dorsièrs</string>
+ <string name="share_dialog_title">Partiment</string>
+ <string name="share_no_users">Cap de donada es pas partejada amb d\'utilizaires pel moment</string>
+ <string name="share_add_user_or_group">Apondre un utilizaire o un grop</string>
+ <string name="share_via_link_section_title">Partejar lo ligam</string>
+ <string name="share_via_link_expiration_date_label">Especificar una data d\'expiracion</string>
+ <string name="share_via_link_password_label">Protegir per un senhal</string>
+ <string name="share_search">Recercar</string>
+ <string name="search_users_and_groups_hint">Recercar d\'utilizaires e de gropes</string>
</resources>
<string name="filedetails_created">ਬਣਾਈ:</string>
<string name="filedetails_modified">ਸੋਧ ਕੀਤੀ:</string>
<string name="filedetails_download">ਡਾਊਨਲੋਡ</string>
- <string name="filedetails_sync_file">ਫਾਇਲ ਤਾਜ਼ਾ ਕਰੋ</string>
+ <string name="action_share">ਸਾਂਝਾ ਕਰੋ</string>
<string name="common_yes">ਹਾਂ</string>
<string name="common_no">ਨਹੀਂ</string>
<string name="common_ok">ਠੀਕ ਹੈ</string>
- <string name="common_cancel_download">ਡਾਊਨਲੋਡ ਕਰਨਾ ਰੱਦ ਕਰੋ</string>
- <string name="common_cancel_upload">ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ</string>
<string name="common_cancel">ਰੱਦ ਕਰੋ</string>
<string name="common_save_exit">ਸੰਭਾਲੋ ਅਤੇ ਬੰਦ ਕਰੋ</string>
<string name="common_error">ਗਲਤੀ</string>
<string name="common_rename">ਨਾਂ ਬਦਲੋ</string>
<string name="common_remove">ਹਟਾਓ</string>
<string name="confirmation_remove_local">ਕੇਵਲ ਲੋਕਲ</string>
- <string name="confirmation_remove_remote">ਸਰਵਰ ਤੋਂ ਹਟਾਓ</string>
- <string name="confirmation_remove_remote_and_local">ਰਿਮੋਟ ਤੇ ਲੋਕਲ</string>
+ <string name="confirmation_remove_folder_local">ਕੇਵਲ ਲੋਕਲ</string>
<string name="wait_a_moment">ਪਲ਼ ਭਰ ਲਈ ਉਡੀਕੋ</string>
<string name="filedisplay_no_file_selected">ਕੋਈ ਫਾਇਲ ਨਹੀਂ ਚੁਣੀ ਗਈ</string>
<string name="ssl_validator_header">ਇਹ ਸਾਈਟ ਦੀ ਪਛਾਣ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ ਹੈ</string>
<string name="prefs_category_accounts">ਅਕਾਊਂਟ</string>
<string name="folder_picker_choose_button_text">ਚੁਣੋ</string>
<string name="auth_host_address">ਸਰਵਰ ਐਡਰੈਸ</string>
+ <string name="share_search">ਖੋਜ</string>
</resources>
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Wszystkie pliki</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_settings">Ustawienia</string>
+ <string name="drawer_item_logs">Logi</string>
+ <string name="drawer_close">Zamknij</string>
+ <string name="drawer_open">Otwórz</string>
<string name="prefs_category_general">Ogólne</string>
<string name="prefs_category_more">Więcej</string>
<string name="prefs_accounts">Konta</string>
<string name="uploader_info_uploading">Wysyłanie</string>
<string name="file_list_seconds_ago">sekund temu</string>
<string name="file_list_empty">Pusto. Wyślij coś!</string>
+ <string name="file_list_loading">Wczytywanie...</string>
<string name="local_file_list_empty">Nie ma plików w tym folderze.</string>
<string name="filedetails_select_file">Dotknij plik aby wyświetlić dodatkowe informacje</string>
<string name="filedetails_size">Rozmiar:</string>
<string name="filedetails_created">Utworzono:</string>
<string name="filedetails_modified">Zmodyfikowano:</string>
<string name="filedetails_download">Pobierz</string>
- <string name="filedetails_sync_file">Odśwież plik</string>
<string name="filedetails_renamed_in_upload_msg">Podczas wysyłania nazwa pliku została zmieniona na %1$s</string>
<string name="list_layout">Lista szablonów wyglądu</string>
- <string name="action_share_file">Udostępnij link</string>
- <string name="action_unshare_file">Anuluj udostępnianie</string>
+ <string name="action_share">Udostępnij</string>
<string name="common_yes">Tak</string>
<string name="common_no">Nie</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Anuluj pobieranie</string>
- <string name="common_cancel_upload">Anuluj wysyłanie</string>
<string name="common_cancel">Anuluj</string>
<string name="common_save_exit">Zapisz i wyjdź</string>
<string name="common_error">Błąd</string>
<string name="unfavorite">Usuń z ulubionych</string>
<string name="common_rename">Zmień nazwę</string>
<string name="common_remove">Usuń</string>
- <string name="confirmation_remove_alert">Czy naprawdę chcesz usunąć %1$s?</string>
+ <string name="confirmation_remove_file_alert">Czy naprawdę chcesz usunąć %1$s?</string>
<string name="confirmation_remove_folder_alert">Czy naprawdę chcesz usunąć %1$s i jego zawartość?</string>
<string name="confirmation_remove_local">Tylko lokalnie</string>
- <string name="confirmation_remove_folder_local">Tylko zasoby lokalne</string>
- <string name="confirmation_remove_remote">Usuń z serwera</string>
- <string name="confirmation_remove_remote_and_local">Z serwera i telefonu</string>
+ <string name="confirmation_remove_folder_local">Tylko lokalnie</string>
+ <string name="confirmation_remove_file_remote">Z serwera</string>
<string name="remove_success_msg">Usunięto</string>
<string name="remove_fail_msg">Nie można usunąć</string>
<string name="rename_dialog_title">Wprowadź nową nazwę</string>
<string name="instant_upload_on_wifi">Wysyłaj zdjęcia tylko przez WiFi</string>
<string name="instant_video_upload_on_wifi">Aktualizuj filmy tylko przez WiFi</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Konflikt pliku</string>
<string name="conflict_keep_both">Zatrzymaj oba</string>
+ <string name="conflict_use_local_version">lokalna wersja</string>
+ <string name="conflict_use_server_version">wersja zdalna</string>
<string name="preview_image_description">Podgląd</string>
<string name="preview_image_error_unknown_format">Ten obrazek nie może zostać wyświetlony</string>
<string name="error__upload__local_file_not_copied">%1$s nie może zostać skopiowany do lokalnego folderu %2$s</string>
<string name="move_file_invalid_overwrite">Plik istnieje już w folderze docelowym</string>
<string name="move_file_error">Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu</string>
<string name="forbidden_permissions_move">aby przenieść ten plik</string>
+ <string name="copy_file_invalid_overwrite">Plik istnieje już w folderze docelowym</string>
<string name="prefs_category_instant_uploading">Automatyczne wysyłanie</string>
<string name="prefs_category_security">Bezpieczeństwo</string>
<string name="prefs_instant_video_upload_path_title">Katalog wysyłania dla wideo</string>
- <string name="download_folder_failed_content">Pobieranie %1$s katalogu nie może zostać ukończone</string>
+ <string name="shared_subject_header">udostępniony</string>
+ <string name="with_you_subject_header">z tobą</string>
+ <string name="subject_user_shared_with_you">%1$s wspólne \"%2$s\" z tobą</string>
<string name="auth_refresh_button">Odśwież połączenie</string>
<string name="auth_host_address">Adres Serwera</string>
<string name="common_error_out_memory">Brak wystarczającej pamięci</string>
+ <string name="username">Użytkownik</string>
+ <string name="file_list__footer__folder">1 folder</string>
+ <string name="file_list__footer__folders">%1$d folderów</string>
+ <string name="file_list__footer__file">1 plik</string>
+ <string name="file_list__footer__file_and_folder">1 plik , 1 folder</string>
+ <string name="share_dialog_title">Udostępnianie</string>
+ <string name="share_via_link_section_title">Udostępnij link</string>
+ <string name="share_via_link_expiration_date_label">Ustaw datę wygaśnięcia</string>
+ <string name="share_via_link_password_label">Zabezpiecz hasłem</string>
+ <string name="share_search">Wyszukaj</string>
</resources>
<string name="drawer_item_settings">Configurações</string>
<string name="drawer_item_logs">Logs</string>
<string name="drawer_close">Fechar</string>
+ <string name="drawer_open">Abrir</string>
<string name="prefs_category_general">Geral</string>
<string name="prefs_category_more">Mais</string>
<string name="prefs_accounts">Contas</string>
<string name="file_list_seconds_ago">segundos atrás</string>
<string name="file_list_empty">Nada aqui. Envie alguma coisa!</string>
<string name="file_list_loading">Carregando...</string>
+ <string name="file_list_no_app_for_file_type">Nenhum aplicativo encontrado por tipo de arquivo!</string>
<string name="local_file_list_empty">Não existe nenhum arquivo nesta pasta.</string>
<string name="filedetails_select_file">Toque em um arquivo para mostrar informações adicionais.</string>
<string name="filedetails_size">Tamanho:</string>
<string name="filedetails_created">Criado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Baixar</string>
- <string name="filedetails_sync_file">Atualizar arquivo</string>
+ <string name="filedetails_sync_file">Sincronizar</string>
<string name="filedetails_renamed_in_upload_msg">Arquivo foi renomeado para %1$s durante o envio</string>
<string name="list_layout">Lista de Layout</string>
- <string name="action_share_file">Compartilhar link</string>
- <string name="action_unshare_file">Descompartilhar o link</string>
+ <string name="action_share">Compartilhar</string>
<string name="common_yes">Sim</string>
<string name="common_no">Não</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Cancelar o download</string>
- <string name="common_cancel_upload">Cancelar envio</string>
+ <string name="common_cancel_sync">Cancelar a sincronização</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Salvar & Sair</string>
<string name="common_error">Erro</string>
<string name="unfavorite">Nãofavorito</string>
<string name="common_rename">Renomear</string>
<string name="common_remove">Remover</string>
- <string name="confirmation_remove_alert">Você realmente deseja remover %1$s?</string>
+ <string name="confirmation_remove_file_alert">Você realmente deseja remover %1$s?</string>
<string name="confirmation_remove_folder_alert">Você realmente deseja remover %1$s e seus conteúdos?</string>
<string name="confirmation_remove_local">Somente local</string>
- <string name="confirmation_remove_folder_local">Somente conteúdo local</string>
- <string name="confirmation_remove_remote">Remover do servidor</string>
- <string name="confirmation_remove_remote_and_local">Ambos remoto e local</string>
+ <string name="confirmation_remove_folder_local">Somente local</string>
+ <string name="confirmation_remove_file_remote">Do servidor</string>
+ <string name="confirmation_remove_remote_and_local">Remoto & local</string>
<string name="remove_success_msg">Removido com sucesso</string>
<string name="remove_fail_msg">Erro ao remover</string>
<string name="rename_dialog_title">Digite um novo nome</string>
<string name="ssl_validator_label_validity_to">Para:</string>
<string name="ssl_validator_label_signature">Assinatura:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
+ <string name="digest_algorithm_not_available">Este algoritmo de resumo não está disponível no seu telefone.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Impressão digital:</string>
+ <string name="certificate_load_problem">Existe um problema ao carregar o certificado.</string>
<string name="ssl_validator_null_cert">O certificado não pode ser mostrado.</string>
<string name="ssl_validator_no_info_about_error">- Nenhuma informação sobre o erro</string>
<string name="placeholder_sentence">Este é um espaço reservado</string>
<string name="conflict_title">Conflito de arquivo</string>
<string name="conflict_message">Quais arquivos você deseja manter? Se você selecionar ambas as versões, o arquivo local terá um número adicionado ao seu nome.</string>
<string name="conflict_keep_both">Manter ambos</string>
- <string name="conflict_use_local_version">Usar a versão local</string>
- <string name="conflict_use_server_version">Usar a versão servidor</string>
+ <string name="conflict_use_local_version">versão local</string>
+ <string name="conflict_use_server_version">versão do servidor</string>
<string name="preview_image_description">Pré-visualização da imagem</string>
<string name="preview_image_error_unknown_format">Esta imagem não pode ser mostrada</string>
<string name="error__upload__local_file_not_copied">%1$s não pôde ser copiado para pasta local %2$s</string>
<string name="share_link_password_title">Digite uma senha</string>
<string name="share_link_empty_password">Você deve digitar uma senha</string>
<string name="activity_chooser_send_file_title">Enviar</string>
- <string name="copy_link">Copiar o link</string>
+ <string name="copy_link">Copiar link</string>
<string name="clipboard_text_copied">Copiado para área de transferência</string>
<string name="error_cant_bind_to_operations_service">Erro crítico: não pode executar operações</string>
<string name="network_error_socket_exception">Ocorreu um erro durante a conexão com o servidor.</string>
<string name="downloader_download_file_not_found">Este arquivo não mais está disponível neste servidor</string>
<string name="prefs_category_accounts">Contas</string>
<string name="prefs_add_account">Adicionar uma conta</string>
- <string name="auth_redirect_non_secure_connection_title">Conexão segura esta redirecionada para uma rota não segura.</string>
+ <string name="auth_redirect_non_secure_connection_title">A conexão segura está redirecionada através de uma rota insegura.</string>
<string name="actionbar_logger">Logs</string>
<string name="log_send_history_button">Enviar Histórico</string>
<string name="log_send_no_mail_app">Não foi encontrado nenhum app para envio de logs. Instale o mail app!</string>
<string name="move_file_invalid_overwrite">O arquivo já existe na pasta de destino</string>
<string name="move_file_error">Ocorreu um erro ao tentar mover este arquivo ou pasta</string>
<string name="forbidden_permissions_move">mover este arquivo</string>
+ <string name="copy_file_not_found">Não é possível copiar. Por favor verifique se o arquivo existe</string>
+ <string name="copy_file_invalid_into_descendent">Não é possível copiar uma pasta em uma descendente</string>
+ <string name="copy_file_invalid_overwrite">O arquivo já existe na pasta de destino</string>
+ <string name="copy_file_error">Ocorreu um erro ao tentar copiar este arquivo ou pasta</string>
+ <string name="forbidden_permissions_copy">para copiar este arquivo</string>
<string name="prefs_category_instant_uploading">Envios Instantâneos</string>
<string name="prefs_category_security">Segurança</string>
<string name="prefs_instant_video_upload_path_title">Enviar o Caminho do Vídeo</string>
- <string name="download_folder_failed_content">Baixar %1$s da pasta não pode ser completado</string>
+ <string name="sync_folder_failed_content">A sincronização da pasta %1$s não pode ser finalizada</string>
<string name="shared_subject_header">compartilhado</string>
<string name="with_you_subject_header">com você</string>
- <string name="subject_token">%1$s compartilhado \"%2$s\" com você</string>
- <string name="saml_subject_token">\"%1$s\" foi compartilhado com você</string>
+ <string name="subject_user_shared_with_you">%1$s compartilhado \"%2$s\" com você</string>
+ <string name="subject_shared_with_you">\"%1$s\" foi compartilhado com você</string>
<string name="auth_refresh_button">Reinicializar conexão</string>
<string name="auth_host_address">Endereço do servidor</string>
<string name="common_error_out_memory">Não há memoria suficiente</string>
<string name="file_list__footer__files">%1$d arquivos</string>
<string name="file_list__footer__files_and_folder">%1$d arquivos, 1 pasta</string>
<string name="file_list__footer__files_and_folders">%1$d arquivos, %2$d pastas</string>
+ <string name="share_dialog_title">Compartilhamento</string>
+ <string name="share_no_users">Ainda não existe nenhum dado compartilhado com usuários</string>
+ <string name="share_add_user_or_group">Adicionar Usuário ou Grupo</string>
+ <string name="share_via_link_section_title">Compartilhar link</string>
+ <string name="share_via_link_expiration_date_label">Definir data de expiração</string>
+ <string name="share_via_link_password_label">Proteger com senha</string>
+ <string name="share_search">Perquisar</string>
+ <string name="search_users_and_groups_hint">Pesquisar usuários e grupos</string>
+ <string name="share_group_clarification">%1$s (grupo)</string>
+ <string name="share_sharee_unavailable">Desculpe, sua versão do servidor não permite compartilhamento com usuários que também são clientes.
+ \nEntre em contato com o administrador</string>
</resources>
<string name="drawer_item_settings">Definições</string>
<string name="drawer_item_logs">Registos de Alterações</string>
<string name="drawer_close">Fechar</string>
+ <string name="drawer_open">Abrir</string>
<string name="prefs_category_general">Geral</string>
<string name="prefs_category_more">Mais</string>
<string name="prefs_accounts">Contas</string>
<string name="uploader_info_uploading">A enviar</string>
<string name="file_list_seconds_ago">segundos atrás</string>
<string name="file_list_empty">Aqui não existe nada. Envie alguma coisa!</string>
+ <string name="file_list_loading">A carregar...</string>
+ <string name="file_list_no_app_for_file_type">Nenhuma App encontrada por tipo de ficheiro!</string>
<string name="local_file_list_empty">Não existem ficheiros nesta pasta.</string>
<string name="filedetails_select_file">Toque num ficheiro para visualizar a informação adicional.</string>
<string name="filedetails_size">Tamanho:</string>
<string name="filedetails_created">Criado:</string>
<string name="filedetails_modified">Modificado:</string>
<string name="filedetails_download">Transferir</string>
- <string name="filedetails_sync_file">Atualizar ficheiro</string>
+ <string name="filedetails_sync_file">Sincronizar</string>
<string name="filedetails_renamed_in_upload_msg">O ficheiro foi renomeado para %1$s durante o envio.</string>
- <string name="action_share_file">Partilhar a hiperligação</string>
- <string name="action_unshare_file">Cancelar partilha da hiperligação</string>
+ <string name="list_layout">Apresentação da Lista</string>
+ <string name="action_share">Compartilhar</string>
<string name="common_yes">Sim</string>
<string name="common_no">Não</string>
<string name="common_ok">ACEITAR</string>
- <string name="common_cancel_download">Cancelar a transferência</string>
- <string name="common_cancel_upload">Cancelar o envio</string>
+ <string name="common_cancel_sync">Cancelar sincronização</string>
<string name="common_cancel">Cancelar</string>
<string name="common_save_exit">Guardar & Sair</string>
<string name="common_error">Erro</string>
<string name="unfavorite">Retirar Favorito</string>
<string name="common_rename">Renomear</string>
<string name="common_remove">Remover</string>
- <string name="confirmation_remove_alert">Tem a certeza que deseja remover %1$s ?</string>
+ <string name="confirmation_remove_file_alert">Tem a certeza que deseja remover %1$s ?</string>
<string name="confirmation_remove_folder_alert">Deseja realmente remover %1$s e o seu conteúdo?</string>
<string name="confirmation_remove_local">Apenas localmente</string>
- <string name="confirmation_remove_folder_local">So conteúdos locais</string>
- <string name="confirmation_remove_remote">Apagar do servidor</string>
- <string name="confirmation_remove_remote_and_local">ambos os remoto e local</string>
+ <string name="confirmation_remove_folder_local">Apenas localmente</string>
+ <string name="confirmation_remove_file_remote">Do servidor</string>
+ <string name="confirmation_remove_remote_and_local">Remoto & local</string>
<string name="remove_success_msg">Removido com sucesso</string>
<string name="remove_fail_msg">Não foi possível remover</string>
<string name="rename_dialog_title">Introduza um novo nome</string>
<string name="sync_file_nothing_to_do_msg">O conteúdo do ficheiro já foi sincronizado</string>
<string name="create_dir_fail_msg">Não foi possivel criar a pasta</string>
<string name="filename_forbidden_characters">Caracteres não permitidos: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">O nome de ficheiro contém pelo menos um caráter inválido</string>
<string name="filename_empty">O nome do ficheiro não pode ser vazio.</string>
<string name="wait_a_moment">Aguarde um momento</string>
<string name="filedisplay_unexpected_bad_get_content">Erro inesperado. Por favor tente outra aplicação para seleccionar o ficheiro.</string>
<string name="filedisplay_no_file_selected">Não selecionou nenhum ficheiro</string>
<string name="activity_chooser_title">Enviar a ligação para ...</string>
+ <string name="wait_for_tmp_copy_from_private_storage">A copiar o ficheiro do aramazenamento privado</string>
<string name="oauth_check_onoff">Autenticar-se com oAuth2</string>
<string name="oauth_login_connection">A ligar ao servidor oAuth2</string>
<string name="ssl_validator_header">Não foi possível verificar a identidade do site.</string>
<string name="instant_upload_on_wifi">Só enviar as fotografias via wi-fi</string>
<string name="instant_video_upload_on_wifi">Só enviar os vídeos por wi-fi</string>
<string name="instant_upload_path">/Envio Instantâneo </string>
+ <string name="conflict_title">Conflito de ficheiro</string>
+ <string name="conflict_message">Quais os ficheiros que pretende manter? Se selecionar ambas as versões, o ficheiro local irá ter um número adicionado ao seu nome.</string>
<string name="conflict_keep_both">Manter ambos</string>
+ <string name="conflict_use_local_version">versão local</string>
+ <string name="conflict_use_server_version">versão servidor</string>
<string name="preview_image_description">Pré-Visualizar imagem</string>
<string name="preview_image_error_unknown_format">Esta imagem não pode ser mostrada</string>
<string name="error__upload__local_file_not_copied">Não foi possível copiar %1$s para a pasta local %2$s</string>
<string name="downloader_download_file_not_found">O ficheiro não está mais disponível no servidor</string>
<string name="prefs_category_accounts">Contas</string>
<string name="prefs_add_account">Adicionar conta</string>
- <string name="auth_redirect_non_secure_connection_title">Ligação segura é redireccionada para um caminho inseguro.</string>
+ <string name="auth_redirect_non_secure_connection_title">Uma ligação segura foi redireccionada por uma rota insegura.</string>
<string name="actionbar_logger">Registos de Alterações</string>
<string name="log_send_history_button">Enviar Histórico</string>
<string name="log_send_no_mail_app">Não foi encontrado o aplicativo para envio de registos . Instale app e-mail!</string>
<string name="move_file_invalid_overwrite">O ficheiro já existe na pasta de destino</string>
<string name="move_file_error">Ocorreu um ocorreu quando tentava mover este ficheiro ou pasta</string>
<string name="forbidden_permissions_move">para mover este ficheiro</string>
+ <string name="copy_file_not_found">Não é possível copiar. Por favor, verifique se o ficheiro existe</string>
+ <string name="copy_file_invalid_into_descendent">Não é possível copiar esta pasta para a descendente</string>
+ <string name="copy_file_invalid_overwrite">O ficheiro já existe na pasta de destino</string>
+ <string name="copy_file_error">Ocorreu um ocorreu quando tentava copiar este ficheiro ou pasta</string>
+ <string name="forbidden_permissions_copy">para copiar este ficheiro</string>
<string name="prefs_category_instant_uploading">Envios Instantâneos</string>
<string name="prefs_category_security">Segurança</string>
<string name="prefs_instant_video_upload_path_title">Envio do Caminho do Vídeo</string>
- <string name="download_folder_failed_content">Não foi possível completar o download da pasta %1$s</string>
+ <string name="sync_folder_failed_content">Não foi possível completar a sincronização da pasta %1$s</string>
<string name="shared_subject_header">partilhado</string>
<string name="with_you_subject_header">consigo</string>
+ <string name="subject_user_shared_with_you">%1$s partilhou \"%2$s\" consigo</string>
+ <string name="subject_shared_with_you">\"%1$s\" foi partilhado consigo</string>
<string name="auth_refresh_button">Recarregar ligação</string>
<string name="auth_host_address">Endereço do servidor</string>
<string name="common_error_out_memory">Falta de memória</string>
<string name="username">Nome de utilizador</string>
+ <string name="file_list__footer__folder">1 pasta</string>
+ <string name="file_list__footer__folders">%1$d pastas</string>
+ <string name="file_list__footer__file">1 ficheiro</string>
+ <string name="file_list__footer__file_and_folder">1 ficheiro, 1 pasta</string>
+ <string name="file_list__footer__file_and_folders">1 ficheiro, %1$d pastas</string>
+ <string name="file_list__footer__files">%1$d ficheiros</string>
+ <string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 pasta</string>
+ <string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d pastas</string>
+ <string name="share_dialog_title">Partilha</string>
+ <string name="share_no_users">Ainda não foram partilhados os dados com os utilizadores</string>
+ <string name="share_add_user_or_group">Adicionar Utilziador ou Grupo</string>
+ <string name="share_via_link_section_title">Compartilhar hiperligação</string>
+ <string name="share_via_link_expiration_date_label">Definir a data de expiração</string>
+ <string name="share_via_link_password_label">Proteger com Palavra-passe</string>
+ <string name="share_search">Procurar</string>
</resources>
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <!--TODO re-enable when server-side folder size calculation is available
+ <item>Biggest - Smallest</item>-->
+ <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
+ <!--<string name="drawer_item_accounts">Accounts</string>-->
+ <!--TODO re-enable when "On Device" is available
+ <string name="drawer_item_on_device">On device</string>-->
+ <string name="empty"></string>
+</resources>
<string name="drawer_item_settings">Setări</string>
<string name="drawer_item_logs">Înregistrări</string>
<string name="drawer_close">Închide</string>
+ <string name="drawer_open">Deschide</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Mai mult</string>
<string name="prefs_accounts">Conturi</string>
<string name="filedetails_created">Creat:</string>
<string name="filedetails_modified">Modificat:</string>
<string name="filedetails_download">Descarcă</string>
- <string name="filedetails_sync_file">Împrospătare fișier</string>
<string name="filedetails_renamed_in_upload_msg">Fișierul a fost redenumit %1$s în timpul încărcării</string>
<string name="list_layout">Aspect listă</string>
- <string name="action_share_file">Partajază legătură</string>
- <string name="action_unshare_file">Departajează legătura</string>
+ <string name="action_share">Partajează</string>
<string name="common_yes">Da</string>
<string name="common_no">Nu</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Anulează descărcarea</string>
- <string name="common_cancel_upload">Anulează încărcarea</string>
<string name="common_cancel">Anulează</string>
<string name="common_save_exit">Salvare și ieșire</string>
<string name="common_error">Eroare</string>
<string name="auth_can_not_auth_against_server">Nu se poate autentifica cu acest server</string>
<string name="auth_account_does_not_exist">Contul nu există încă în dispozitiv</string>
<string name="favorite">Favorit</string>
+ <string name="unfavorite">Defavoritați</string>
<string name="common_rename">Redenumește</string>
<string name="common_remove">Elimină</string>
- <string name="confirmation_remove_alert">Doriti sigur sa stergeti %1$s?</string>
+ <string name="confirmation_remove_file_alert">Doriti sigur sa stergeti %1$s?</string>
<string name="confirmation_remove_folder_alert">Sigur vrei să elimini %1$s și conținutul său?</string>
<string name="confirmation_remove_local">Doar local</string>
- <string name="confirmation_remove_folder_local">Doar continut local</string>
- <string name="confirmation_remove_remote">Elimină de pe server</string>
- <string name="confirmation_remove_remote_and_local">De la distanță și local</string>
+ <string name="confirmation_remove_folder_local">Doar local</string>
+ <string name="confirmation_remove_file_remote">De pe server</string>
+ <string name="confirmation_remove_remote_and_local">Ambele</string>
<string name="remove_success_msg">Eliminat cu succes</string>
<string name="remove_fail_msg">Eliminarea nu a reușit</string>
<string name="rename_dialog_title">Introduceţi un nou nume</string>
<string name="instant_upload_on_wifi">Încarcă poze doar prin WiFi</string>
<string name="instant_video_upload_on_wifi">Încarcă videoclipuri doar via WiFi</string>
<string name="instant_upload_path">/Încărcare instantă</string>
+ <string name="conflict_title">Conflict de fișiere</string>
+ <string name="conflict_message">Care fișiere doriți să păstrați? Dacă selectați „ambele”, fișierului local i se va adăuga un număr numelui său.</string>
<string name="conflict_keep_both">Pastreaza amandoua</string>
+ <string name="conflict_use_local_version">versiunea locală</string>
+ <string name="conflict_use_server_version">versiunea de pe server</string>
<string name="preview_image_description">Previzualizare imagine</string>
<string name="preview_image_error_unknown_format">Aceasta imagine nu poate fi arătată</string>
<string name="error__upload__local_file_not_copied">%1$s nu a putut fi copiat in dosarul local %2$s </string>
<string name="unshare_link_file_error">A apărut o eroare în timp ce încerca să departajeze sau unshare acest fișier sau folder</string>
<string name="share_link_password_title">Introduceţi parola</string>
<string name="share_link_empty_password">Trebuie să introduci o parolă</string>
- <string name="activity_chooser_send_file_title">Expediază</string>
+ <string name="activity_chooser_send_file_title">Trimite</string>
<string name="copy_link">Link copiat</string>
<string name="clipboard_text_copied">Copiat în clipboard</string>
<string name="error_cant_bind_to_operations_service">Eroare critică: nu se pot executa operațiunile</string>
<string name="downloader_download_file_not_found">Fișierul nu mai este disponibil pe server</string>
<string name="prefs_category_accounts">Conturi</string>
<string name="prefs_add_account">Adaugă cont</string>
- <string name="auth_redirect_non_secure_connection_title">Conexiunea securizată este redirecționată către un traseu neasigurat.</string>
<string name="actionbar_logger">Înregistrări</string>
<string name="log_send_history_button">Trimite Istoria</string>
<string name="log_send_no_mail_app">App-ul de trimitere a inregistrărilor nu a fost găsit. Instalează mail app-ul!</string>
<string name="move_file_invalid_overwrite">Fișierul există deja în dosarul de destinație</string>
<string name="move_file_error">O eroare apare la transferarea acestui fișier sau dosar</string>
<string name="forbidden_permissions_move">pentru a muta acest fișier</string>
+ <string name="copy_file_invalid_overwrite">Fișierul există deja în dosarul de destinație</string>
<string name="prefs_category_instant_uploading">Încărcări instante</string>
<string name="prefs_category_security">Securitate</string>
<string name="prefs_instant_video_upload_path_title">Calea de încărcare Video</string>
- <string name="download_folder_failed_content">Descărcarea fișierului %1$s nu s-a finisat</string>
<string name="shared_subject_header">partajat</string>
<string name="with_you_subject_header">cu tine</string>
- <string name="subject_token">%1$s a partajat fișierul \"%2$s\" cu tine</string>
+ <string name="subject_user_shared_with_you">%1$s a partajat fișierul \"%2$s\" cu tine</string>
+ <string name="subject_shared_with_you">„%1$s” a fost partajat cu dumneavoastră</string>
<string name="auth_refresh_button">Reîmprospătează conexiunea</string>
<string name="auth_host_address">Adresa server-ului</string>
<string name="common_error_out_memory">Memorie insuficientă </string>
<string name="file_list__footer__files">%1$d fișiere</string>
<string name="file_list__footer__files_and_folder">%1$d fișiere, 1 folder</string>
<string name="file_list__footer__files_and_folders">%1$d fișiere, %2$d foldere</string>
+ <string name="share_dialog_title">Partajare</string>
+ <string name="share_via_link_section_title">Partajază legătură</string>
+ <string name="share_via_link_expiration_date_label">Specifică data expirării</string>
+ <string name="share_via_link_password_label">Protejare cu parolă</string>
+ <string name="share_search">Căutare</string>
</resources>
<string name="fd_keep_in_sync">Обновлять файл</string>
<string name="common_rename">Переименовать</string>
<string name="common_remove">Удалить</string>
- <string name="confirmation_remove_alert">Вы действительно хотите удалить %1$s?</string>
+ <string name="confirmation_remove_file_alert">Вы действительно хотите удалить %1$s?</string>
<string name="confirmation_remove_folder_alert">Вы действительно хотите удалить %1$s и все содержимое ?</string>
<string name="confirmation_remove_local">Только локально</string>
<string name="confirmation_remove_folder_local">Только локальное содержимое</string>
- <string name="confirmation_remove_remote">Удалить с сервера</string>
+ <string name="confirmation_remove_file_remote">Удалить с сервера</string>
<string name="confirmation_remove_remote_and_local">Оба, удаленный и локальный</string>
<string name="remove_success_msg">Успешное удаление</string>
<string name="remove_fail_msg">Удаление не может быть завершено</string>
<string name="drawer_item_settings">Настройки</string>
<string name="drawer_item_logs">Журналы</string>
<string name="drawer_close">Закрыть</string>
+ <string name="drawer_open">Открыть</string>
<string name="prefs_category_general">Основные</string>
<string name="prefs_category_more">Больше</string>
<string name="prefs_accounts">Учётные записи</string>
<string name="file_list_seconds_ago">несколько секунд назад</string>
<string name="file_list_empty">Здесь ничего нет. Загрузите что-нибудь!</string>
<string name="file_list_loading">Загрузка...</string>
+ <string name="file_list_no_app_for_file_type">Не найдено приложений для этого типа файла.</string>
<string name="local_file_list_empty">В этом каталоге нет файлов.</string>
<string name="filedetails_select_file">Нажмите на файл для отображения дополнительной информации.</string>
<string name="filedetails_size">Размер:</string>
<string name="filedetails_created">Создан:</string>
<string name="filedetails_modified">Изменён:</string>
<string name="filedetails_download">Скачать</string>
- <string name="filedetails_sync_file">Ð\9eбновиÑ\82Ñ\8c Ñ\84айл</string>
+ <string name="filedetails_sync_file">СинÑ\85Ñ\80онизаÑ\86иÑ\8f</string>
<string name="filedetails_renamed_in_upload_msg">Файл был переименован в %1$s во время загрузки</string>
<string name="list_layout">Макет списка</string>
- <string name="action_share_file">Поделиться ссылкой</string>
- <string name="action_unshare_file">Убрать ссылку</string>
+ <string name="action_share">Общий доступ</string>
<string name="common_yes">Да</string>
<string name="common_no">Нет</string>
<string name="common_ok">ОК</string>
- <string name="common_cancel_download">Отменить скачивание</string>
- <string name="common_cancel_upload">Отменить загрузку</string>
+ <string name="common_cancel_sync">Отменить синхронизацию</string>
<string name="common_cancel">Отмена</string>
<string name="common_save_exit">Сохранить и выйти</string>
<string name="common_error">Ошибка</string>
<string name="unfavorite">Убрать из избранного</string>
<string name="common_rename">Переименовать</string>
<string name="common_remove">Удалить</string>
- <string name="confirmation_remove_alert">Вы действительно хотите удалить %1$s?</string>
+ <string name="confirmation_remove_file_alert">Вы действительно хотите удалить %1$s?</string>
<string name="confirmation_remove_folder_alert">Вы действительно хотите удалить %1$s и его содержимое?</string>
<string name="confirmation_remove_local">Только локально</string>
- <string name="confirmation_remove_folder_local">Только локальные данные</string>
- <string name="confirmation_remove_remote">УдалиÑ\82Ñ\8c Ñ\81 сервера</string>
- <string name="confirmation_remove_remote_and_local">Удалённо и локально</string>
+ <string name="confirmation_remove_folder_local">Только локально</string>
+ <string name="confirmation_remove_remote">Ð\9eÑ\82 сервера</string>
+ <string name="confirmation_remove_remote_and_local">Удаленно и локально</string>
<string name="remove_success_msg">Удаление завершено</string>
<string name="remove_fail_msg">Ошибка удаления</string>
<string name="rename_dialog_title">Введите новое имя</string>
<string name="ssl_validator_label_validity_to">По:</string>
<string name="ssl_validator_label_signature">Подпись:</string>
<string name="ssl_validator_label_signature_algorithm">Алгоритм:</string>
+ <string name="digest_algorithm_not_available">Этот хэш алгоритм не доступен на этом телефоне.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Отпечаток пальца:</string>
+ <string name="certificate_load_problem">Проблема при загрузке сертификата.</string>
<string name="ssl_validator_null_cert">Сертификат не может быть показан.</string>
<string name="ssl_validator_no_info_about_error">- Нет информации об ошибке</string>
<string name="placeholder_sentence">Это заполнитель</string>
<string name="instant_upload_on_wifi">Загрузка изображений только через Wi-Fi</string>
<string name="instant_video_upload_on_wifi">Загрузка видео только через WiFi</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Конфликт файлов</string>
+ <string name="conflict_message">Какие файлы Вы хотите сохранить? При выборе обеих версий, к названию локального файла будет добавлена цифра</string>
<string name="conflict_keep_both">Сохранить оба</string>
+ <string name="conflict_use_local_version">локальная версия</string>
+ <string name="conflict_use_server_version">удаленная версия</string>
<string name="preview_image_description">Предпросмотр</string>
<string name="preview_image_error_unknown_format">Это изображение не может быть отображено</string>
<string name="error__upload__local_file_not_copied">%1$s невозможно скопировать в локальный каталог %2$s </string>
<string name="share_link_file_error">При попытке поделиться этим файлом или каталогом произошла ошибка</string>
<string name="unshare_link_file_no_exist">Невозможно закрыть доступ. Убедитесь что файл существует</string>
<string name="unshare_link_file_error">При попытке закрыть доступ к этому файлу или каталогу произошла ошибка</string>
+ <string name="update_link_file_no_exist">Не удается обновить. Пожалуйста, проверьте, существует ли файл</string>
+ <string name="update_link_file_error">Произошла ошибка при попытке обновить общую ссылку</string>
<string name="share_link_password_title">Введите пароль</string>
<string name="share_link_empty_password">Вы должны ввести пароль</string>
<string name="activity_chooser_send_file_title">Отправить</string>
<string name="forbidden_permissions_delete">для удаления этого файла</string>
<string name="share_link_forbidden_permissions">для открытия доступа к этому файлу</string>
<string name="unshare_link_forbidden_permissions">для закрытия доступа к этому файлу</string>
+ <string name="update_link_forbidden_permissions">обновить эту общую ссылку</string>
<string name="forbidden_permissions_create">для создания файла</string>
<string name="uploader_upload_forbidden_permissions">для загрузки в этот каталог</string>
<string name="downloader_download_file_not_found">Этот файл больше недоступен на сервере</string>
<string name="prefs_category_accounts">Учётные записи</string>
<string name="prefs_add_account">Добавить учетную запись</string>
- <string name="auth_redirect_non_secure_connection_title">Ð\97аÑ\89иÑ\89Ñ\91нное Ñ\81оединение пеÑ\80енапÑ\80авлено по небезопаÑ\81номÑ\83 маÑ\80Ñ\88Ñ\80Ñ\83Ñ\82Ñ\83</string>
+ <string name="auth_redirect_non_secure_connection_title">Ð\91езопаÑ\81ное Ñ\81оединение пеÑ\80енапÑ\80авлено Ñ\87еÑ\80ез небезопаÑ\81нÑ\8bй маÑ\80Ñ\88Ñ\80Ñ\83Ñ\82.</string>
<string name="actionbar_logger">Журналы</string>
<string name="log_send_history_button">История Отправлений</string>
<string name="log_send_no_mail_app">Приложение для отправки журнала не найдено. Установите почтовое приложение!</string>
<string name="move_file_invalid_overwrite">Файл уже существует в каталоге назначения</string>
<string name="move_file_error">Произошла ошибка при попытке перемещения этого файла или каталога</string>
<string name="forbidden_permissions_move">для перемещения этого файла</string>
+ <string name="copy_file_not_found">Не удалось произвести копирование. Пожалуйста проверьте существование файла</string>
+ <string name="copy_file_invalid_into_descendent">Нельзя произвести копирование папки в унаследованную папку</string>
+ <string name="copy_file_invalid_overwrite">Файл уже существует в каталоге назначения</string>
+ <string name="copy_file_error">Произошла ошибка во время копирования этого файла или папки</string>
+ <string name="forbidden_permissions_copy">для копирования этого файла</string>
<string name="prefs_category_instant_uploading">Мгновенные загрузки</string>
<string name="prefs_category_security">Безопасность</string>
<string name="prefs_instant_video_upload_path_title">Путь для загрузки Видео</string>
- <string name="download_folder_failed_content">Не удалось завершить скачивание каталога %1$s</string>
+ <string name="sync_folder_failed_content">Синхронизация папки %1$s не может быть завершена</string>
<string name="shared_subject_header">поделился</string>
<string name="with_you_subject_header">с вами</string>
- <string name="subject_token">%1$s предоставил вам доступ к \"%2$s\"</string>
+ <string name="subject_user_shared_with_you">%1$s предоставил вам доступ к \"%2$s\"</string>
+ <string name="subject_shared_with_you">Вам предоставлен доступ к \"%1$s\"</string>
<string name="auth_refresh_button">Обновить соединение</string>
<string name="auth_host_address">Адрес сервера</string>
<string name="common_error_out_memory">Недостаточно памяти</string>
<string name="file_list__footer__files">%1$d файлов</string>
<string name="file_list__footer__files_and_folder">%1$d файлов, 1 каталог</string>
<string name="file_list__footer__files_and_folders">%1$d файлов, %2$d каталогов</string>
+ <string name="share_dialog_title">Общий доступ</string>
+ <string name="share_with_user_section_title">Поделиться с пользователями и группами</string>
+ <string name="share_no_users">Нет данных используемых совместно с другими пользователями</string>
+ <string name="share_add_user_or_group">Добавить пользователя или группу</string>
+ <string name="share_via_link_section_title">Поделиться ссылкой</string>
+ <string name="share_via_link_expiration_date_label">Установить срок действия</string>
+ <string name="share_via_link_password_label">Защитить паролем</string>
+ <string name="share_via_link_password_title">Безопасный</string>
+ <string name="share_get_public_link_button">Получить ссылку</string>
+ <string name="share_search">Найти</string>
+ <string name="search_users_and_groups_hint">Поиск пользователей и групп</string>
+ <string name="share_group_clarification">%1$s (группа)</string>
+ <string name="share_sharee_unavailable">Извините, версия вашего сервера не позволяет поделиться с пользователями через клиент. \nПожалуйста обратитесь к администратору</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">විවෘත කරන්න</string>
<string name="prefs_category_general">සාමාන්යයෙන්</string>
<string name="prefs_category_more">වැඩි</string>
<string name="prefs_accounts">ගිණුම්</string>
<string name="filedetails_created">සෑදු දිනය:</string>
<string name="filedetails_modified">වෙනස් කළ දිනය:</string>
<string name="filedetails_download">භාගත කරන්න</string>
+ <string name="action_share">බෙදා හදා ගන්න</string>
<string name="common_yes">ඔව්</string>
<string name="common_no">එපා</string>
<string name="common_ok">හරි</string>
- <string name="common_cancel_upload">උඩුගත කිරීම අත් හරින්න</string>
<string name="common_cancel">එපා</string>
<string name="common_save_exit">සුරැක & පිටවන්න</string>
<string name="common_error">දෝශය</string>
<string name="common_rename">නැවත නම් කරන්න</string>
<string name="common_remove">ඉවත් කරන්න </string>
<string name="confirmation_remove_local">පෙදෙසි පමණක්</string>
- <string name="confirmation_remove_remote">සේවාදායකයාගෙන් ඉවත් කරන්න</string>
- <string name="confirmation_remove_remote_and_local">දුරස්ථ හා පෙදෙසි </string>
+ <string name="confirmation_remove_folder_local">පෙදෙසි පමණක්</string>
<string name="remove_success_msg">සාර්ථක ඉවත්කිරීමක්</string>
<string name="remove_fail_msg">ඉවත් කිරීම සම්පූර්ණ කළ නොහැක</string>
<string name="rename_server_fail_msg">නැවත නම් කිරීම සම්පුර්ණ කළ නොහැකි විය</string>
<string name="prefs_category_accounts">ගිණුම්</string>
<string name="folder_picker_choose_button_text">තෝරන්න</string>
<string name="auth_host_address">සේවාදායකයේ ලිපිනය</string>
+ <string name="share_dialog_title">හුවමාරු කිරීම</string>
+ <string name="share_via_link_expiration_date_label">කල් ඉකුත් විමේ දිනය දමන්න</string>
+ <string name="share_via_link_password_label">මුර පදයකින් ආරක්ශාකරන්න</string>
+ <string name="share_search">සොයන්න</string>
</resources>
<string name="drawer_item_settings">Nastavenia</string>
<string name="drawer_item_logs">Logy</string>
<string name="drawer_close">Zavrieť</string>
+ <string name="drawer_open">Otvoriť</string>
<string name="prefs_category_general">Všeobecné</string>
<string name="prefs_category_more">Viac</string>
<string name="prefs_accounts">Účty</string>
<string name="prefs_manage_accounts">Správa účtov</string>
+ <string name="prefs_passcode">Heslo</string>
<string name="prefs_instant_upload">Okamžité nahratie obrázka</string>
<string name="prefs_instant_upload_summary">Okamžite nahrať obrázok zaznamenaný fotoaparátom</string>
<string name="prefs_instant_video_upload">Okamžité nahranie videa</string>
<string name="uploader_info_uploading">Nahrávanie</string>
<string name="file_list_seconds_ago">pred sekundami</string>
<string name="file_list_empty">Žiadny súbor. Nahrajte niečo!</string>
+ <string name="file_list_loading">Načítavam...</string>
+ <string name="file_list_no_app_for_file_type">Nenašla sa aplikácia pre tento typ súboru!</string>
<string name="local_file_list_empty">V tomto priečinku nie sú žiadne súbory.</string>
<string name="filedetails_select_file">Viac informácií získate kliknutím na súbor.</string>
<string name="filedetails_size">Veľkosť:</string>
<string name="filedetails_created">Vytvorený:</string>
<string name="filedetails_modified">Zmenený:</string>
<string name="filedetails_download">Stiahnuť</string>
- <string name="filedetails_sync_file">Obnoviť súbor</string>
+ <string name="filedetails_sync_file">Synchronizovať</string>
<string name="filedetails_renamed_in_upload_msg">Súbor bol premenovaný na %1$s počas nahrávania</string>
- <string name="action_share_file">Zdieľať linku</string>
- <string name="action_unshare_file">Zrušiť zdieľanie odkazu</string>
+ <string name="list_layout">Rozvrhnutie zoznamu</string>
+ <string name="action_share">Zdieľať</string>
<string name="common_yes">Áno</string>
<string name="common_no">Nie</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Zrušiť sťahovanie</string>
- <string name="common_cancel_upload">Zrušiť odosielanie</string>
+ <string name="common_cancel_sync">Zrušiť synchronizáciu</string>
<string name="common_cancel">Zrušiť</string>
<string name="common_save_exit">Uložiť a ukončiť</string>
<string name="common_error">Chyba</string>
<string name="upload_query_move_foreign_files">Nie je dostatok miesta na skopírovanie vybraných súborov do priečinka %1$s. Želáte si ich namiesto toho presunúť?</string>
<string name="pass_code_enter_pass_code">Prosím, vložte svoje heslo:</string>
<string name="pass_code_configure_your_pass_code">Vložte svoje heslo</string>
+ <string name="pass_code_configure_your_pass_code_explanation">Heslo bude nutné zadať vždy po štarte aplikácie</string>
<string name="pass_code_reenter_your_pass_code">Prosím, vložte znovu svoje heslo:</string>
<string name="pass_code_remove_your_pass_code">Zmazať svoje heslo</string>
+ <string name="pass_code_mismatch">Heslá sa nezhodujú</string>
+ <string name="pass_code_wrong">Nesprávne heslo</string>
<string name="pass_code_removed">Bezpečnostný kód odstránený</string>
<string name="pass_code_stored">Bezpečnostný kód uložený</string>
<string name="media_notif_ticker">Prehrávač hudby %1$s</string>
<string name="unfavorite">Odobrať z obľúbených</string>
<string name="common_rename">Premenuj</string>
<string name="common_remove">Odober</string>
- <string name="confirmation_remove_alert">Naozaj chcete odstrániť %1$s?</string>
+ <string name="confirmation_remove_file_alert">Naozaj chcete odstrániť %1$s?</string>
<string name="confirmation_remove_folder_alert">Naozaj chcete odstrániť %1$s a jeho obsah?</string>
<string name="confirmation_remove_local">Iba lokálne</string>
- <string name="confirmation_remove_folder_local">Len lokálny obsah</string>
- <string name="confirmation_remove_remote">Zmazať zo servera</string>
- <string name="confirmation_remove_remote_and_local">Vzdialené a lokálne</string>
+ <string name="confirmation_remove_folder_local">Iba lokálne</string>
+ <string name="confirmation_remove_file_remote">Zo servera</string>
+ <string name="confirmation_remove_remote_and_local">Vzdialene aj lokálne</string>
<string name="remove_success_msg">Úspešne odstránené</string>
<string name="remove_fail_msg">Odstránenie zlyhalo</string>
<string name="rename_dialog_title">Zadajte nové meno</string>
<string name="sync_file_nothing_to_do_msg">Obsah súboru je zosynchronizovaný</string>
<string name="create_dir_fail_msg">Priečinok nie je možné vytvoriť</string>
<string name="filename_forbidden_characters">Zakázané znaky: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">Názov súboru obsahuje nevhodný znak</string>
<string name="filename_empty">Názov súboru nemôže byť prázdny</string>
<string name="wait_a_moment">Počkať chvíľu</string>
<string name="filedisplay_unexpected_bad_get_content">Neočakávaný problém; skúste vybrať súbor inou aplikáciou</string>
<string name="filedisplay_no_file_selected">Nebol vybraný súbor</string>
<string name="activity_chooser_title">Odošli link do ...</string>
+ <string name="wait_for_tmp_copy_from_private_storage">Kopírovanie súboru z privátneho úložiska</string>
<string name="oauth_check_onoff">Prihlásiť sa z oAuth2</string>
<string name="oauth_login_connection">Pripájam sa na oAuth2 server…</string>
<string name="ssl_validator_header">Identitu stránky nemožno overiť</string>
<string name="ssl_validator_label_validity_to">Do: </string>
<string name="ssl_validator_label_signature">Podpis:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritmus:</string>
+ <string name="digest_algorithm_not_available">Algoritmus digest nie je na vašom telefóne dostupný.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Odtlačok:</string>
+ <string name="certificate_load_problem">Nastal problém s načítaním certifikátu.</string>
<string name="ssl_validator_null_cert">Certifikát nemohol byť zobrazený.</string>
<string name="ssl_validator_no_info_about_error">- Žiadne informácie o tejto chybe</string>
<string name="placeholder_sentence">Toto je \"placeholder\"</string>
<string name="instant_upload_on_wifi">Odoslať fotografie iba cez WiFi</string>
<string name="instant_video_upload_on_wifi">Nahrávať videá len cez WiFi</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Konflikt súborov</string>
+ <string name="conflict_message">Ktoré súbory si prajate ponachať? Pokiaľ to budú obe verzie, lokálnej pribudne k názvu číslo.</string>
<string name="conflict_keep_both">Ponechať oba</string>
+ <string name="conflict_use_local_version">lokálnu verziu</string>
+ <string name="conflict_use_server_version">serverovú verziu</string>
<string name="preview_image_description">Ukážka obrazu</string>
<string name="preview_image_error_unknown_format">Obrázok nemožno zobraziť</string>
<string name="error__upload__local_file_not_copied">%1$s nemožno skopírovať do lokálneho priečinka %2$s</string>
<string name="downloader_download_file_not_found">Súbor už na serveri nie je dostupný</string>
<string name="prefs_category_accounts">Účty</string>
<string name="prefs_add_account">Pridať účet</string>
- <string name="auth_redirect_non_secure_connection_title">Zabezpečené pripojenie je presmerované na nezabezpečenú trasu.</string>
+ <string name="auth_redirect_non_secure_connection_title">Zabezpečené spojenie je presmerované nezabezpečenou cestou.</string>
<string name="actionbar_logger">Logy</string>
<string name="log_send_history_button">Odoslať históriu</string>
<string name="log_send_no_mail_app">Nebola nájdená aplikácia pre odosielanie log protokolov. Nainštalujte si mailovú aplikáciu!</string>
<string name="move_file_invalid_overwrite">Súbor už v cieľovom priečinku existuje</string>
<string name="move_file_error">Pri pokuse o presun tohoto súboru alebo priečinka nastala chyba</string>
<string name="forbidden_permissions_move">pre presun tohoto súboru</string>
+ <string name="copy_file_not_found">Nemožno kopírovať. Overte či súbor ešte existuje</string>
+ <string name="copy_file_invalid_into_descendent">Nemožno kopírovať priečinok do jeho podpriečinka</string>
+ <string name="copy_file_invalid_overwrite">Súbor už v cieľovom priečinku existuje</string>
+ <string name="copy_file_error">Počas kopírovania súboru alebo zložky sa vyskytla chyba</string>
+ <string name="forbidden_permissions_copy">kopírovať súbor</string>
<string name="prefs_category_instant_uploading">Okamžité nahratie</string>
<string name="prefs_category_security">Zabezpečenie</string>
<string name="prefs_instant_video_upload_path_title">Cesta pre nahrávanie videí</string>
- <string name="download_folder_failed_content">Sťahovanie %1$s priečinka nebolo dokončené</string>
+ <string name="sync_folder_failed_content">Synchronizáciu priečinka %1$s nebolo možné dokončiť</string>
<string name="shared_subject_header">zdieľané</string>
<string name="with_you_subject_header">s vami</string>
- <string name="subject_token">%1$s vám zdieľal \"%2$s\"</string>
+ <string name="subject_user_shared_with_you">%1$s vám zdieľal \"%2$s\"</string>
+ <string name="subject_shared_with_you">\"%1$s\" bol s vami nazdieľaný</string>
<string name="auth_refresh_button">Obnoviť pripojenie</string>
<string name="auth_host_address">Adresa servera</string>
<string name="common_error_out_memory">Nedostatok pamäte</string>
<string name="username">Používateľské meno</string>
+ <string name="file_list__footer__folder">1 priečinok</string>
+ <string name="file_list__footer__folders">%1$d prieč.</string>
+ <string name="file_list__footer__file">1 súbor</string>
+ <string name="file_list__footer__file_and_folder">1 súbor, 1 priečinok</string>
+ <string name="file_list__footer__file_and_folders">1 súbor, %1$d prieč.</string>
+ <string name="file_list__footer__files">%1$d súb.</string>
+ <string name="file_list__footer__files_and_folder">%1$d súb., 1 priečinok</string>
+ <string name="file_list__footer__files_and_folders">%1$d súb., %2$d prieč.</string>
+ <string name="share_dialog_title">Zdieľanie</string>
+ <string name="share_no_users">Zatiaľ s používateľmi nezdieľate žiadne dáta.</string>
+ <string name="share_add_user_or_group">Pridať používateľa alebo skupinu</string>
+ <string name="share_via_link_section_title">Zdieľať linku</string>
+ <string name="share_via_link_expiration_date_label">Nastaviť dátum expirácie</string>
+ <string name="share_via_link_password_label">Chrániť heslom</string>
+ <string name="share_search">Hľadať</string>
+ <string name="search_users_and_groups_hint">Vyhľadať používateľov alebo skupiny</string>
+ <string name="share_group_clarification">%1$s (skupina)</string>
+ <string name="share_sharee_unavailable">Je nám ľúto, vaša verzia servera neumožňuje zdieľanie s používateľmi alebo skupinami.
+\nProsím, obráťte sa na svojho správcu</string>
</resources>
<string name="drawer_item_settings">Nastavitve</string>
<string name="drawer_item_logs">Dnevnik</string>
<string name="drawer_close">Zapri</string>
+ <string name="drawer_open">Odpri</string>
<string name="prefs_category_general">Splošno</string>
<string name="prefs_category_more">Več</string>
<string name="prefs_accounts">Računi</string>
<string name="file_list_seconds_ago">pred nekaj sekundami</string>
<string name="file_list_empty">Tukaj še ni ničesar. Najprej je treba datoteke poslati v oblak!</string>
<string name="file_list_loading">Poteka nalaganje ...</string>
+ <string name="file_list_no_app_for_file_type">Ne najdem aplikacije za to vrsto datoteke!</string>
<string name="local_file_list_empty">V tej mapi ni datotek.</string>
<string name="filedetails_select_file">Pritisnite na datoteko za prikaz dodatnih podrobnosti.</string>
<string name="filedetails_size">Velikost:</string>
<string name="filedetails_created">Ustvarjeno:</string>
<string name="filedetails_modified">Spremenjeno:</string>
<string name="filedetails_download">Prejmi</string>
- <string name="filedetails_sync_file">Osveži datoteko</string>
+ <string name="filedetails_sync_file">Sinhroniziraj</string>
<string name="filedetails_renamed_in_upload_msg">Datoteka je bila med nalaganjem preimenovana v %1$s</string>
<string name="list_layout">Postavitev seznama</string>
- <string name="action_share_file">Povezava za souporabo</string>
- <string name="action_unshare_file">Odstrani možnost souporabe</string>
+ <string name="action_share">Souporaba</string>
<string name="common_yes">Da</string>
<string name="common_no">Ne</string>
<string name="common_ok">V redu</string>
- <string name="common_cancel_download">Prekliči prejem</string>
- <string name="common_cancel_upload">Prekliči pošiljanje</string>
+ <string name="common_cancel_sync">Prekliči sinhronizacijo</string>
<string name="common_cancel">Prekliči</string>
<string name="common_save_exit">Shrani in končaj</string>
<string name="common_error">Napaka</string>
<string name="unfavorite">Odstrani priljubljeno</string>
<string name="common_rename">Preimenuj</string>
<string name="common_remove">Odstrani</string>
- <string name="confirmation_remove_alert">Ali res želite odstraniti %1$s?</string>
+ <string name="confirmation_remove_file_alert">Ali res želite odstraniti %1$s?</string>
<string name="confirmation_remove_folder_alert">Ali res želite odstraniti %1$s skupaj s celotno vsebino?</string>
<string name="confirmation_remove_local">Le krajevno</string>
- <string name="confirmation_remove_folder_local">Le krajevno vsebino</string>
- <string name="confirmation_remove_remote">Odstrani s strežnika</string>
- <string name="confirmation_remove_remote_and_local">Oddaljeno in krajevno</string>
+ <string name="confirmation_remove_folder_local">Le krajevno</string>
+ <string name="confirmation_remove_file_remote">S strežnika</string>
+ <string name="confirmation_remove_remote_and_local">Oddaljeno & krajevno</string>
<string name="remove_success_msg">Odstranitev je uspešno končana</string>
<string name="remove_fail_msg">Odstranjevanje je spodletelo</string>
<string name="rename_dialog_title">Vnesite novo ime</string>
<string name="ssl_validator_label_validity_to">Do:</string>
<string name="ssl_validator_label_signature">Podpis:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritem:</string>
+ <string name="digest_algorithm_not_available">Ta algoritem ni na voljo na vašem telefonu.</string>
+ <string name="certificate_load_problem">Imam težavo z nalaganjem certifikata.</string>
<string name="ssl_validator_null_cert">Potrdila ni mogoče pokazati.</string>
<string name="ssl_validator_no_info_about_error">– Ni podatkov o napaki</string>
<string name="placeholder_sentence">To je vsebnik predmetov</string>
<string name="instant_upload_on_wifi">Pošiljaj slike le preko povezav Wi-Fi</string>
<string name="instant_video_upload_on_wifi">Pošlji posnetke le preko povezave Wi-Fi</string>
<string name="instant_upload_path">/Poslano</string>
+ <string name="conflict_title">Neskladje datotek</string>
+ <string name="conflict_message">Katere datoteke želite ohraniti? Če izberete obe različici, bo krajevni datoteki dodatna k imenu še številka.</string>
<string name="conflict_keep_both">Ohrani obe</string>
+ <string name="conflict_use_local_version">krajevna različica</string>
+ <string name="conflict_use_server_version">različica strežnika</string>
<string name="preview_image_description">Predogled slike</string>
<string name="preview_image_error_unknown_format">Te slike ni mogoče prikazati</string>
<string name="error__upload__local_file_not_copied">Datoteke %1$s ni mogoče kopirati v krajevno mapo %2$s</string>
<string name="share_link_file_error">Prišlo je do napake med poskusom omogočanja souporabe te datoteke ali mape</string>
<string name="unshare_link_file_no_exist">Ni mogoče prekiniti souporabe. Preverite, ali datoteka obstaja.</string>
<string name="unshare_link_file_error">Prišlo je do napake med poskusom odstranjevanja souporabe te datoteke ali mape</string>
+ <string name="update_link_file_no_exist">Nemorem posodobiti. Prosim, preverite ali datoteka obstaja.</string>
+ <string name="update_link_file_error">Prišlo je do napake med posodabljanjem povezav</string>
<string name="share_link_password_title">Vpis gesla</string>
<string name="share_link_empty_password">Vpisati je treba geslo.</string>
<string name="activity_chooser_send_file_title">Pošlji</string>
<string name="forbidden_permissions_delete">za izbris datoteke.</string>
<string name="share_link_forbidden_permissions">za omogočanje souporabe datoteke.</string>
<string name="unshare_link_forbidden_permissions">za preklic souporabe datoteke.</string>
+ <string name="update_link_forbidden_permissions">za posodobitev te povezave za souporabo</string>
<string name="forbidden_permissions_create">za ustvarjanje datoteke.</string>
<string name="uploader_upload_forbidden_permissions">za pošiljanje datoteke v oblak.</string>
<string name="downloader_download_file_not_found">Datoteka na strežniku ni več na voljo.</string>
<string name="move_file_invalid_overwrite">Datoteka v ciljni mapi že obstaja.</string>
<string name="move_file_error">Prišlo je do napake med premikanjem datoteke v mapo</string>
<string name="forbidden_permissions_move">med premikanjem datoteke</string>
+ <string name="copy_file_not_found">Ne morem kopirati. Prosim, preverite ali datoteka obstaja.</string>
+ <string name="copy_file_invalid_into_descendent">Ni mogoče kopirati mape v podrejeno mapo.</string>
+ <string name="copy_file_invalid_overwrite">Datoteka v ciljni mapi že obstaja.</string>
+ <string name="copy_file_error">Prišlo je do napake med kopiranjem datoteke v mapo</string>
+ <string name="forbidden_permissions_copy">za kopiranje te datoteke</string>
<string name="prefs_category_instant_uploading">Takojšnje pošiljanje v oblak</string>
<string name="prefs_category_security">Varnost</string>
<string name="prefs_instant_video_upload_path_title">Pot videa za pošiljanje</string>
- <string name="download_folder_failed_content">Imenika %1$s ni mogoče prejeti v celoti</string>
+ <string name="sync_folder_failed_content">Sinhronizacija mape %1$s ne more biti zaključena</string>
<string name="shared_subject_header">v souporabi</string>
<string name="with_you_subject_header">z vami</string>
- <string name="subject_token">Uporabnik %1$s je omogočil souporabo \"%2$s\" z vami</string>
+ <string name="subject_user_shared_with_you">Uporabnik %1$s je omogočil souporabo \"%2$s\" z vami</string>
+ <string name="subject_shared_with_you">\"%1$s\" je oddan v souporabo z vami</string>
<string name="auth_refresh_button">Osveži povezavo</string>
<string name="auth_host_address">Naslov strežnika</string>
<string name="common_error_out_memory">Ni dovolj pomnilnika</string>
<string name="file_list__footer__files">%1$d datotek</string>
<string name="file_list__footer__files_and_folder">%1$d datotek, 1 mapa</string>
<string name="file_list__footer__files_and_folders">%1$d datotek, %2$d map</string>
+ <string name="share_dialog_title">Souporaba</string>
+ <string name="share_with_user_section_title">Deli z uporabniki in skupinami</string>
+ <string name="share_no_users">Podatki še niso bili deljeni z uporabniki</string>
+ <string name="share_add_user_or_group">Dodaj uporabnika ali skupino</string>
+ <string name="share_via_link_section_title">Povezava za souporabo</string>
+ <string name="share_via_link_expiration_date_label">Nastavi datum preteka</string>
+ <string name="share_via_link_password_label">Zaščiti z geslom</string>
+ <string name="share_via_link_password_title">Varovano</string>
+ <string name="share_get_public_link_button">Vzami povezavo</string>
+ <string name="share_search">Poišči</string>
+ <string name="search_users_and_groups_hint">Poišči uporabniku in skupine</string>
+ <string name="share_group_clarification">%1$s (skupina)</string>
+ <string name="share_sharee_unavailable">Žal, vaš strežnik ne dovoljuje deljenja z uporabniki med strankami.
+ \nKontaktirajte skrbnika.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
- <string name="actionbar_upload">Ngarko</string>
- <string name="actionbar_upload_files">Skedarët</string>
- <string name="actionbar_mkdir">Dosje e\'re</string>
- <string name="actionbar_settings">Parametrat</string>
- <string name="actionbar_send_file">Dërgo</string>
+ <string name="about_android">Aplikacioni Android %1$s</string>
+ <string name="about_version">version %1$s</string>
+ <string name="actionbar_sync">Rifreskoni llogarinë</string>
+ <string name="actionbar_upload">Ngarkoni</string>
+ <string name="actionbar_upload_from_apps">Lëndë nga aplikacione të tjera</string>
+ <string name="actionbar_upload_files">Kartela</string>
+ <string name="actionbar_open_with">Hape me</string>
+ <string name="actionbar_mkdir">Dosje e re</string>
+ <string name="actionbar_settings">Rregullime</string>
+ <string name="actionbar_see_details">Hollësi</string>
+ <string name="actionbar_send_file">Dërgoje</string>
+ <string name="actionbar_sort">Renditi</string>
+ <string name="actionbar_sort_title">Renditi sipas</string>
+ <string-array name="actionbar_sortby">
+ <item>A-Z</item>
+ <item>Më e reja - Më e vjetra</item>
+ </string-array>
<!--TODO re-enable when server-side folder size calculation is available
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Krejt kartelat</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
- <string name="prefs_category_general">Përgjithshme</string>
+ <string name="drawer_item_settings">Llogari</string>
+ <string name="drawer_item_logs">Regjistra</string>
+ <string name="drawer_close">Mbylle</string>
+ <string name="drawer_open">Hape</string>
+ <string name="prefs_category_general">Të përgjithshme</string>
<string name="prefs_category_more">Më tepër</string>
- <string name="prefs_accounts">Llogarit</string>
+ <string name="prefs_accounts">Llogari</string>
+ <string name="prefs_manage_accounts">Administroni Llogari</string>
+ <string name="prefs_passcode">Kyçje kodkalimi</string>
+ <string name="prefs_instant_upload">Ngarkime të menjëhershme fotosh</string>
+ <string name="prefs_instant_upload_summary">Ngarkoni menjëherë foto të bëra nga kamera</string>
+ <string name="prefs_instant_video_upload">Ngarkime të menjëhershme videosh</string>
+ <string name="prefs_instant_video_upload_summary">Ngarkoni menjëherë video të bëra nga kamera</string>
+ <string name="prefs_log_title">Aktivizoni Regjistrimet</string>
+ <string name="prefs_log_summary">Kjo përdoret për të regjistruar probleme</string>
+ <string name="prefs_log_title_history">Historik Regjistrimesh</string>
+ <string name="prefs_log_summary_history">Kjo shfaq regjistrimet e bëra</string>
+ <string name="prefs_log_delete_history_button">Fshije Historikun</string>
<string name="prefs_help">Ndihmë</string>
- <string name="prefs_imprint">Stampoj</string>
- <string name="auth_username">Përdoruesi</string>
- <string name="auth_password">Kodi</string>
- <string name="sync_string_files">Skedarët</string>
- <string name="setup_btn_connect">Lidhu</string>
- <string name="uploader_btn_upload_text">Ngarko</string>
- <string name="uploader_btn_new_folder_text">Dosje e\'re</string>
- <string name="uploader_wrn_no_account_title">Nuk u gjend asnjë llogari</string>
- <string name="uploader_wrn_no_account_text">Nuk ka %1$s llogari në pajisjen tuaj. Ju lutemi të krijojnë një llogari të parë.</string>
- <string name="uploader_wrn_no_account_setup_btn_text">Ndërto</string>
- <string name="uploader_wrn_no_account_quit_btn_text">Dil</string>
- <string name="uploader_info_uploading">Ngarko</string>
+ <string name="prefs_recommend">Këshillojani një shoku</string>
+ <string name="prefs_feedback">Përshtypje</string>
+ <string name="prefs_imprint">Imprint</string>
+ <string name="prefs_remember_last_share_location">Mba mend vend ndarjeje me të tjerët</string>
+ <string name="prefs_remember_last_upload_location_summary">Mba mend vendin e fundit të ngarkimit për ndarje me të tjerët</string>
+ <string name="recommend_subject">Provojeni %1$s te telefoni juaj!</string>
+ <string name="recommend_text">Dua t\’ju ftoj të përdorni %1$s në telefonin tuaj!\nShkarkojeni prej këtu: %2$s</string>
+ <string name="auth_check_server">Kontrollo Shërbyesin</string>
+ <string name="auth_host_url">Adresë https://… e shërbyesit</string>
+ <string name="auth_username">Emër përdoruesi</string>
+ <string name="auth_password">Fjalëkalim</string>
+ <string name="auth_register">Rishtar te %1$s?</string>
+ <string name="sync_string_files">Kartela</string>
+ <string name="setup_btn_connect">Lidhuni</string>
+ <string name="uploader_btn_upload_text">Ngarkoni</string>
+ <string name="uploader_btn_new_folder_text">Dosje e re</string>
+ <string name="uploader_top_message">Zgjidhni dosje ngarkimi:</string>
+ <string name="uploader_wrn_no_account_title">S\’u gjet llogari</string>
+ <string name="uploader_wrn_no_account_text">S\’ka llogari %1$s te pajisja juaj. Ju lutemi, rregulloni së pari një llogari.</string>
+ <string name="uploader_wrn_no_account_setup_btn_text">Rregullim</string>
+ <string name="uploader_wrn_no_account_quit_btn_text">Dilni</string>
+ <string name="uploader_wrn_no_content_title">Pa lëndë për ngarkim</string>
+ <string name="uploader_wrn_no_content_text">S\’u mor lëndë. Asgjë për t\’u ngarkuar.</string>
+ <string name="uploader_error_forbidden_content">%1$s nuk i lejohet të hyjë në lëndë të përbashkët</string>
+ <string name="uploader_info_uploading">Ngarkim</string>
<string name="file_list_seconds_ago">sekonda më parë</string>
- <string name="file_list_empty">Këtu nuk ka asgje. Ngarko dicka</string>
- <string name="filedetails_select_file">Trokitje e lehtë në një dokument për të shfaqur informacion shtesë.</string>
- <string name="filedetails_size">Dimensioni:</string>
- <string name="filedetails_type">Tipi:</string>
- <string name="filedetails_created">Krijuar:</string>
- <string name="filedetails_modified">Modifikuar:</string>
- <string name="filedetails_download">Shkarko</string>
- <string name="action_share_file">Ndaje lidhjen</string>
+ <string name="file_list_empty">Këtu nuk ka gjë. Ngarkoni diçka!</string>
+ <string name="file_list_loading">Po ngarkohet…</string>
+ <string name="file_list_no_app_for_file_type">S\’u gjet aplikacion për llojin e kartelës!</string>
+ <string name="local_file_list_empty">Në këtë dosje s\’ka kartela.</string>
+ <string name="filedetails_select_file">Prekni mbi një kartelë që të shfaqen të dhëna shtesë.</string>
+ <string name="filedetails_size">Madhësi:</string>
+ <string name="filedetails_type">Lloj:</string>
+ <string name="filedetails_created">Krijuar më:</string>
+ <string name="filedetails_modified">Ndryshuar më:</string>
+ <string name="filedetails_download">Shkarkoje</string>
+ <string name="filedetails_sync_file">Njëkohëso</string>
+ <string name="filedetails_renamed_in_upload_msg">Kartela u riemërtua si %1$s gjatë ngarkimit</string>
+ <string name="list_layout">Skemë Liste</string>
+ <string name="action_share">Ndaje</string>
<string name="common_yes">Po</string>
<string name="common_no">Jo</string>
- <string name="common_ok">Ok</string>
- <string name="common_cancel_upload">Anulo ngarkimin</string>
- <string name="common_cancel">Anulo</string>
- <string name="common_error">Veprim i gabuar</string>
- <string name="common_error_unknown">Gabim panjohur</string>
+ <string name="common_ok">OK</string>
+ <string name="common_cancel_sync">Anuloje njëkohësimin</string>
+ <string name="common_cancel">Anuloje</string>
+ <string name="common_save_exit">Ruaje & Dil</string>
+ <string name="common_error">Gabim</string>
+ <string name="common_loading">Po ngarkohet …</string>
+ <string name="common_error_unknown">Gabim i panjohur</string>
<string name="about_title">Rreth</string>
- <string name="change_password">Ndrysho fjalëkalimin</string>
- <string name="delete_account">Fshi llogarin</string>
- <string name="create_account">Krijo llogari</string>
- <string name="upload_chooser_title">Ngarko nga...</string>
- <string name="uploader_info_dirname">Emri i Skedarit</string>
- <string name="uploader_upload_in_progress_ticker">Ngarkim...</string>
- <string name="uploader_upload_in_progress_content">%1$d%% Ngarkim %2$s</string>
- <string name="uploader_upload_succeeded_ticker">Ngarkimi me sukses.</string>
+ <string name="change_password">Ndryshoni fjalëkalimin</string>
+ <string name="delete_account">Fshini llogarinë</string>
+ <string name="create_account">Krijoni llogari</string>
+ <string name="upload_chooser_title">Ngarkojeni prej …</string>
+ <string name="uploader_info_dirname">Emër dosjeje</string>
+ <string name="uploader_upload_in_progress_ticker">Po ngarkohet …</string>
+ <string name="uploader_upload_in_progress_content">%1$d%% Po ngarkohet %2$s</string>
+ <string name="uploader_upload_succeeded_ticker">Ngarkimi doli me sukses</string>
<string name="uploader_upload_succeeded_content_single">%1$s u ngarkua me sukses</string>
<string name="uploader_upload_failed_ticker">Ngarkimi dështoi</string>
- <string name="uploader_upload_failed_content_single">Ngarkimi i %1$s nuk mund te behej</string>
- <string name="downloader_download_in_progress_ticker">Shkarkimi...</string>
- <string name="downloader_download_in_progress_content">%1$d%% Shkarkimi %2$s</string>
- <string name="downloader_download_succeeded_ticker">Shkarkimi me sukses</string>
+ <string name="uploader_upload_failed_content_single">Ngarkimi i %1$s s\’u plotësua dot</string>
+ <string name="uploader_upload_failed_credentials_error">Ngarkimi dështoi, lypset të ribëni hyrjen</string>
+ <string name="downloader_download_in_progress_ticker">Po shkarkohet …</string>
+ <string name="downloader_download_in_progress_content">%1$d%% Shkarkim %2$s</string>
+ <string name="downloader_download_succeeded_ticker">Shkarkimi doli me sukses</string>
<string name="downloader_download_succeeded_content">%1$s u shkarkua me sukses</string>
- <string name="downloader_download_failed_ticker">Shkarkimi dështoj</string>
- <string name="common_choose_account">Zgjidhni Llogarine</string>
- <string name="auth_no_net_conn_title">Nuk ka lidhje ne Rrjet</string>
+ <string name="downloader_download_failed_ticker">Shkarkimi dështoi</string>
+ <string name="downloader_download_failed_content">Shkarkimi i %1$s s\’u plotësua dot</string>
+ <string name="downloader_not_downloaded_yet">Ende e pashkarkuar</string>
+ <string name="downloader_download_failed_credentials_error">Shkarkimi dështoi, lypset të ribëni hyrjen</string>
+ <string name="common_choose_account">Zgjidhni llogari</string>
+ <string name="sync_fail_ticker">Njëkohësimi dështoi</string>
+ <string name="sync_fail_ticker_unauthorized">Njëkohësimi dështoi, lypset të ribëni hyrjen</string>
+ <string name="sync_fail_content">Njëkohësimi i %1$s s\’u plotësua dot</string>
+ <string name="sync_fail_content_unauthorized">Fjalëkalim i pavlefshëm për %1$s</string>
+ <string name="sync_conflicts_in_favourites_ticker">U hasën përplasje</string>
+ <string name="sync_fail_in_favourites_content">Lënda e %1$d kartelave s\’u njëkohësua dot (%2$d përplasje)</string>
+ <string name="sync_foreign_files_forgotten_ticker">Disa kartela vendore u harruan</string>
+ <string name="sync_foreign_files_forgotten_content">%1$d kartela nga dosja %2$s s\’u kopjuan dot</string>
+ <string name="sync_foreign_files_forgotten_explanation">Nga versioni 1.3.16 e tutje, kartelat e ngarkuara nga kjo pajisje kopjohen te dosja vendore %1$s, për të parandaluar humbje të dhënash, kur një kartelë e vetme njëkohësohet me disa llogari.\n\nPër shkak të këtij ndryshimi, krejt kartelat e ngarkuara nën versione të mëparshëm të këtij aplikacioni u kopjuan në dosjen %2$s. Por plotësimin e këtij veprimi e pengoi një gabim gjatë njëkohësimit të llogarisë. Ose mund t\’i lini kartelat siç janë, dhe të hiqni lidhjen për te %3$s, ose të kaloni kartelat te dosja %1$s dhe të mbani lidhjen për te %4$s.\n\nMë poshtë radhiten kartelat vendore, dhe kartelat e largëta te %5$s me të cilat lidhen.</string>
+ <string name="sync_current_folder_was_removed">Dosja %1$s s\’ekziston më</string>
+ <string name="foreign_files_move">Zhvendosi krejt</string>
+ <string name="foreign_files_success">U zhvendosën krejt kartelat</string>
+ <string name="foreign_files_fail">Disa kartela s\’u zhvendosën dot</string>
+ <string name="foreign_files_local_text">Vendore: %1$s</string>
+ <string name="foreign_files_remote_text">E largët: %1$s</string>
+ <string name="upload_query_move_foreign_files">S\’ka hapësirë të mjaftueshme për të kopjuar te dosja %1$s kartelat e përzgjedhur. Doni t\i zhvendosni më mirë? </string>
+ <string name="pass_code_enter_pass_code">Ju lutemi, futni kodkalimin tuaj</string>
+ <string name="pass_code_configure_your_pass_code">Jepni kodkalimin tuaj</string>
+ <string name="pass_code_configure_your_pass_code_explanation">Kodkalimi do të kërkohet sa herë që niset aplikacioni</string>
+ <string name="pass_code_reenter_your_pass_code">Ju lutemi, rifutni kodkalimin tuaj</string>
+ <string name="pass_code_remove_your_pass_code">Hiqeni kodkalimin tuaj</string>
+ <string name="pass_code_mismatch">Kodkalimet s\’janë të njëjtë</string>
+ <string name="pass_code_wrong">Kodkalim i pasaktë</string>
+ <string name="pass_code_removed">Kodkalimi u hoq</string>
+ <string name="pass_code_stored">Kodkalimi u depozitua</string>
+ <string name="media_notif_ticker">Lojtësi %1$s i muzikës</string>
+ <string name="media_state_playing">%1$s (po luhet)</string>
+ <string name="media_state_loading">%1$s (po ngarkohet)</string>
+ <string name="media_event_done">Luajtja e %1$s përfundoi</string>
+ <string name="media_err_nothing_to_play">S\’u gjetën kartela media</string>
+ <string name="media_err_no_account">S\’u dha llogari</string>
+ <string name="media_err_not_in_owncloud">Kartelë jo në llogari të vlefshme</string>
+ <string name="media_err_unsupported">Kodek mediash i pambuluar</string>
+ <string name="media_err_io">S\’u lexua dot kartela media</string>
+ <string name="media_err_malformed">Kartelë media e koduar jo si duhet</string>
+ <string name="media_err_timeout">Mbaroi koha, teksa përpiqej të luhej</string>
+ <string name="media_err_invalid_progressive_playback">Kartela media s\’mund të transmetohet</string>
+ <string name="media_err_unknown">Kartela media s\’mund të luhet me lojtësin standard</string>
+ <string name="media_err_security_ex">Gabim sigurie gjatë përpjekjes për luajtje të %1$s</string>
+ <string name="media_err_io_ex">Gabim input-i gjatë përpjekjes për luajtje të %1$s</string>
+ <string name="media_err_unexpected">Gabim i papritur gjatë përpjekjes për luajtje të %1$s</string>
+ <string name="media_rewind_description">Butoni Mbrapsht</string>
+ <string name="media_play_pause_description">Butoni Luaje ose Pushoje</string>
+ <string name="media_forward_description">Butoni Përpara</string>
+ <string name="auth_getting_authorization">Po merret autorizim…</string>
+ <string name="auth_trying_to_login">Po përpiqet të bëhet hyrja…</string>
+ <string name="auth_no_net_conn_title">Pa lidhje rrjeti</string>
+ <string name="auth_nossl_plain_ok_title">S\’ka lidhje të sigurt.</string>
<string name="auth_connection_established">Lidhja u vendos</string>
- <string name="auth_secure_connection">Lidhja e Sigurt vendos</string>
- <string name="common_rename">Riemërto</string>
- <string name="common_remove">Hiq</string>
- <string name="activity_chooser_send_file_title">Dërgo</string>
+ <string name="auth_testing_connection">Po provohet lidhja</string>
+ <string name="auth_not_configured_title">Formësim i keqformuar shërbyesi</string>
+ <string name="auth_account_not_new">Ka tashmë në pajisje një llogari për të njëjtin përdorues dhe shërbyes</string>
+ <string name="auth_account_not_the_same">Përdoruesi i dhënë s\’përputhet me përdoruesin e kësaj llogarie</string>
+ <string name="auth_unknown_error_title">Ndodhi një gabim i panjohur!</string>
+ <string name="auth_unknown_host_title">S\’u gjet dot strehë</string>
+ <string name="auth_incorrect_path_title">S\’u gjet dot instancë shërbyesi</string>
+ <string name="auth_timeout_title">Shërbyesit iu desh shumë kohë për përgjigje</string>
+ <string name="auth_incorrect_address_title">URL e keqformuar</string>
+ <string name="auth_ssl_general_error_title">Gatitja e SSL-së dështoi</string>
+ <string name="auth_ssl_unverified_server_title">S\’u verifikua dot identiteti i shërbyesit SSL</string>
+ <string name="auth_bad_oc_version_title">Version i papranuar shërbyesi</string>
+ <string name="auth_wrong_connection_title">S\’u vendos dot lidhja</string>
+ <string name="auth_secure_connection">U vendos lidhje e sigurt</string>
+ <string name="auth_unauthorized">Emër përdoruesi ose fjalëkalim i gabuar</string>
+ <string name="auth_oauth_error">Autorizim jo i suksesshëm</string>
+ <string name="auth_oauth_error_access_denied">Hyrje e mohuar nga shërbyesi i autorizimeve</string>
+ <string name="auth_wtf_reenter_URL">Gjendje e papritur; ju lutemi, rijepni URL-në e shërbyesit</string>
+ <string name="auth_expired_oauth_token_toast">Autorizimi juaj skadoi. Ju lutemi, autorizohuni sërish</string>
+ <string name="auth_expired_basic_auth_toast">Ju lutemi, jepni fjalëkalimin e tanishëm</string>
+ <string name="auth_expired_saml_sso_token_toast">Sesioni juaj skadoi. Ju lutemi, rilidhuni</string>
+ <string name="auth_connecting_auth_server">Po lidhet te shërbyesi i mirëfilltësimeve…</string>
+ <string name="auth_unsupported_auth_method">Shërbyesi s\’e mbulon këtë metodë mirëfilltësimesh</string>
+ <string name="auth_unsupported_multiaccount">%1$s s\’mbulon llogari të shumëfishta</string>
+ <string name="auth_fail_get_user_name">Shërbyesi juaj s\’po përgjigje me id të saktë përdoruesi, ju lutemi, lidhuni me një admin</string>
+ <string name="auth_can_not_auth_against_server">S\’mund të bëhet mirëfilltësim kundrejt këtij shërbyesi</string>
+ <string name="auth_account_does_not_exist">Llogaria s\’ekziston ende te pajisja</string>
+ <string name="favorite">Vëre te Të parapëlqyerit</string>
+ <string name="unfavorite">Hiqe nga Të parapëlqyerit</string>
+ <string name="common_rename">Riemërtojeni</string>
+ <string name="common_remove">Hiqe</string>
+ <string name="confirmation_remove_alert">Doni vërtet të hiqet %1$s?</string>
+ <string name="confirmation_remove_folder_alert">Doni vërtet të hiqet %1$s dhe lënda e tij?</string>
+ <string name="confirmation_remove_local">Vetëm vendorja</string>
+ <string name="confirmation_remove_folder_local">Vetëm vendorja</string>
+ <string name="confirmation_remove_remote">Nga shërbyesi</string>
+ <string name="confirmation_remove_remote_and_local">E largëta & dhe vendorja</string>
+ <string name="remove_success_msg">Heqja doli me sukses</string>
+ <string name="remove_fail_msg">Heqja dështoi</string>
+ <string name="rename_dialog_title">Jepni një emër të ri</string>
+ <string name="rename_local_fail_msg">Kopja vendore s\’u riemërtua dot; provoni një emër tjetër</string>
+ <string name="rename_server_fail_msg">Riemërtimi s\’u plotësua dot</string>
+ <string name="sync_file_fail_msg">S\’u kap dot kartela</string>
+ <string name="sync_file_nothing_to_do_msg">Lëndë kartele tashmë e njëkohësuar</string>
+ <string name="create_dir_fail_msg">S\’u krijua dot dosja</string>
+ <string name="filename_forbidden_characters">Shenja të ndaluara: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">Emri i kartelës përmban të paktën një shenjë të pavlefshme</string>
+ <string name="filename_empty">Emri i kartelës s\’mund të jetë i zbrazët</string>
+ <string name="wait_a_moment">Pritni një çast</string>
+ <string name="filedisplay_unexpected_bad_get_content">Problem i papritur; ju lutemi, përzgjidhni një kartelë nga një aplikacion tjetër</string>
+ <string name="filedisplay_no_file_selected">S\’u përzgjodh kartelë</string>
+ <string name="activity_chooser_title">Dërgoni lidhje te …</string>
+ <string name="wait_for_tmp_copy_from_private_storage">Po kopjohet kartelë nga depo private</string>
+ <string name="oauth_check_onoff">Hyrje me oAuth2</string>
+ <string name="oauth_login_connection">Po lidhet me shërbyesin oAuth2…</string>
+ <string name="ssl_validator_header">Identiteti i sajtit s\’u verifikua dot</string>
+ <string name="ssl_validator_reason_cert_not_trusted">- Dëshmia e shërbyesit s\’është e besuar</string>
+ <string name="ssl_validator_reason_cert_expired">- Dëshmia e shërbyesit skadoi</string>
+ <string name="ssl_validator_reason_cert_not_yet_valid">- Datat e vlefshmërisë së dëshmisë së shërbyesit i përkasin të ardhmes</string>
+ <string name="ssl_validator_reason_hostname_not_verified">- URL-ja s\’përputhet me emrin e strehëemrit te dëshmia</string>
+ <string name="ssl_validator_question">Doni të besohet kjo dëshmi sido qoftë?</string>
+ <string name="ssl_validator_not_saved">Dëshmia s\’u ruajt dot</string>
+ <string name="ssl_validator_btn_details_see">Hollësi</string>
+ <string name="ssl_validator_btn_details_hide">Fshihe</string>
+ <string name="ssl_validator_label_subject">Lëshuar për:</string>
+ <string name="ssl_validator_label_issuer">Lëshuar nga:</string>
+ <string name="ssl_validator_label_CN">Emër i rëndomtë:</string>
+ <string name="ssl_validator_label_O">Organizëm:</string>
+ <string name="ssl_validator_label_OU">Njësi organizative:</string>
+ <string name="ssl_validator_label_C">Vend:</string>
+ <string name="ssl_validator_label_ST">Shtet:</string>
+ <string name="ssl_validator_label_L">Vendndodhje:</string>
+ <string name="ssl_validator_label_validity">Vlefshmëri:</string>
+ <string name="ssl_validator_label_validity_from">Nga:</string>
+ <string name="ssl_validator_label_validity_to">Deri më:</string>
+ <string name="ssl_validator_label_signature">Nënshkrim:</string>
+ <string name="ssl_validator_label_signature_algorithm">Algoritëm:</string>
+ <string name="digest_algorithm_not_available">Ky algoritëm digest s’është i passhëm në telefonin tuaj.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Shenja gishtash:</string>
+ <string name="certificate_load_problem">Pati një problem gjatë ngarkimit të dëshmisë.</string>
+ <string name="ssl_validator_null_cert">Dëshmia s\’u shfaq dot.</string>
+ <string name="ssl_validator_no_info_about_error">- Pa të dhëna rreth gabimit</string>
+ <string name="placeholder_sentence">Kjo është një vendmbajtëse</string>
+ <string name="placeholder_filename">placeholder.txt</string>
+ <string name="placeholder_filetype">Figurë PNG</string>
+ <string name="placeholder_filesize">389 KB</string>
+ <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+ <string name="placeholder_media_time">12:23:45</string>
+ <string name="instant_upload_on_wifi">Fotot ngarkoji vetëm përmes WiFi-it</string>
+ <string name="instant_video_upload_on_wifi">Videot ngarkoji vetëm përmes WiFi-it</string>
+ <string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Përplasje kartelash</string>
+ <string name="conflict_message">Cilat kartela doni të mbani? Nëse përzgjidhni të dy versionet, kartelës vendore do t\’i shtohet një numër te emri.</string>
+ <string name="conflict_keep_both">Mbaji të dyja</string>
+ <string name="conflict_use_local_version">versionin vendor</string>
+ <string name="conflict_use_server_version">versionin e shërbyesit</string>
+ <string name="preview_image_description">Paraparje figure</string>
+ <string name="preview_image_error_unknown_format">Kjo figurë nuk mund të shfaqet</string>
+ <string name="error__upload__local_file_not_copied">%1$s s\’u kopjua dot te dosja vendore %2$s</string>
+ <string name="prefs_instant_upload_path_title">Shteg Ngarkimi</string>
+ <string name="share_link_no_support_share_api">Na ndjeni, ndarja me të tjerët s\’është e aktivizuar te shërbyesi juaj. Ju lutemi, lidhuni me përgjegjësin tuaj.</string>
+ <string name="share_link_file_no_exist">S\’arrin të ndajë me të tjerët. Ju lutemi, kontrolloni nëse kartela ekziston apo jo</string>
+ <string name="share_link_file_error">Ndodhi një gabim teksa përpiqej të ndahej me të tjerët kjo kartelë apo dosje</string>
+ <string name="unshare_link_file_no_exist">S\’arrin të zhbëjë ndarjen me të tjerët. Ju lutemi, kontrolloni nëse kartela ekziston</string>
+ <string name="unshare_link_file_error">Ndodhi një gabim teksa përpiqej të zhbëhej ndarja me të tjerët e kësaj kartele apo dosjeje</string>
+ <string name="update_link_file_no_exist">S’u arrit të përditësohej gjë. Ju lutemi, kontrolloni nëse ekziston apo jo kartela.</string>
+ <string name="update_link_file_error">Ndodhi një gabim teksa provohej të përditësohej lidhja e ndarë me të tjerët</string>
+ <string name="share_link_password_title">Jepni një fjalëkalim</string>
+ <string name="share_link_empty_password">Duhet të jepni një fjalëkalim</string>
+ <string name="activity_chooser_send_file_title">Dërgoje</string>
+ <string name="copy_link">Kopjoje lidhjen</string>
+ <string name="clipboard_text_copied">U kopjua te e papastra</string>
+ <string name="error_cant_bind_to_operations_service">Gabim kritik: nuk mund të kryhen veprime</string>
+ <string name="network_error_socket_exception">Ndodhi një gabim teksa po lidhej me shërbyesin.</string>
+ <string name="network_error_socket_timeout_exception">Ndodhi një gabim teksa po pritej për shërbyesin, veprimi s\’u krye dot</string>
+ <string name="network_error_connect_timeout_exception">Ndodhi një gabim teksa po pritej për shërbyesin, veprimi s\’u krye dot</string>
+ <string name="network_host_not_available">Veprimi s\’u plotësua dot, shërbyesi është i pakapshëm</string>
<string name="empty"></string>
- <string name="prefs_category_accounts">Llogarit</string>
+ <string name="forbidden_permissions">Nuk keni leje %s</string>
+ <string name="forbidden_permissions_rename">për riemërtim të kësaj kartele</string>
+ <string name="forbidden_permissions_delete">për fshirje të kësaj kartele</string>
+ <string name="share_link_forbidden_permissions">për ndarje me të tjerët të kësaj kartele</string>
+ <string name="unshare_link_forbidden_permissions">për zhbërje të ndarjes me të tjerët të kësaj kartele</string>
+ <string name="update_link_forbidden_permissions">që të përditësohet kjo lidhje e ndarë me të tjerët</string>
+ <string name="forbidden_permissions_create">për krijim kartele</string>
+ <string name="uploader_upload_forbidden_permissions">për ngarkim në këtë dosje</string>
+ <string name="downloader_download_file_not_found">Kartela s\’gjendet më te shërbyesi</string>
+ <string name="prefs_category_accounts">Llogari</string>
+ <string name="prefs_add_account">Shtoni llogari</string>
+ <string name="auth_redirect_non_secure_connection_title">Lidhja e sigurt është ridrejtuar përmes një rruge të pasigurt.</string>
+ <string name="actionbar_logger">Regjistra</string>
+ <string name="log_send_history_button">Historik Dërgimesh</string>
+ <string name="log_send_no_mail_app">S\’u gjet aplikacion për dërgim regjistrash. Instaloni aplikacion email-esh!</string>
+ <string name="log_send_mail_subject">Regjistra aplikacioni %1$s për Android</string>
+ <string name="log_progress_dialog_text">Po ngarkohen të dhëna…</string>
+ <string name="saml_authentication_required_text">Lypset mirëfilltësim</string>
<string name="saml_authentication_wrong_pass">Fjalëkalim i gabuar</string>
- <string name="folder_picker_choose_button_text">Zgjidh</string>
- <string name="prefs_category_security">Siguria</string>
- <string name="auth_host_address">Adresa e serverit</string>
+ <string name="actionbar_move">Zhvendose</string>
+ <string name="file_list_empty_moving">S\’ka gjë këtu. Mund të shtoni një dosje!</string>
+ <string name="folder_picker_choose_button_text">Zgjidhni</string>
+ <string name="move_file_not_found">S\’arrin të zhvendosë. Ju lutemi, kontrolloni nëse ekziston apo jo kartela</string>
+ <string name="move_file_invalid_into_descendent">S\’është e mundur të zhvendoset një dosje në një tjetër brenda saj</string>
+ <string name="move_file_invalid_overwrite">Kartela gjendet tashmë te dosja vendmbërritje</string>
+ <string name="move_file_error">Ndodhi një gabim teksa përpiqej të zhvendosej kjo kartelë apo dosje</string>
+ <string name="forbidden_permissions_move">për zhvendosje të kësaj kartele</string>
+ <string name="copy_file_not_found">S\’arrin të kopjojë. Ju lutemi, kontrolloni nëse ekziston apo jo kartela</string>
+ <string name="copy_file_invalid_into_descendent">S\’është e mundur të kopjohet një dosje në një tjetër brenda saj</string>
+ <string name="copy_file_invalid_overwrite">Kartela gjendet tashmë te dosja vendmbërritje</string>
+ <string name="copy_file_error">Ndodhi një gabim teksa përpiqej të kopjohej kjo kartelë apo dosje</string>
+ <string name="forbidden_permissions_copy">për kopjim të kësaj kartele</string>
+ <string name="prefs_category_instant_uploading">Ngarkime të Menjëhershme</string>
+ <string name="prefs_category_security">Siguri</string>
+ <string name="prefs_instant_video_upload_path_title">Shteg Ngarkimi Videosh</string>
+ <string name="sync_folder_failed_content">Njëkohësimi i dosjes %1$s s’u plotësua dot</string>
+ <string name="shared_subject_header">ndarë</string>
+ <string name="with_you_subject_header">me ju</string>
+ <string name="subject_user_shared_with_you">%1$s ndau me ju \"%2$s\"</string>
+ <string name="subject_shared_with_you">\"%1$s\" është ndarë me ju</string>
+ <string name="auth_refresh_button">Rifreskoni lidhjen</string>
+ <string name="auth_host_address">Adresë shërbyesi</string>
+ <string name="common_error_out_memory">Pa kujtesë të mjaftueshme</string>
+ <string name="username">Emër përdoruesi</string>
+ <string name="file_list__footer__folder">1 dosje</string>
+ <string name="file_list__footer__folders">%1$d dosje</string>
+ <string name="file_list__footer__file">1 kartelë</string>
+ <string name="file_list__footer__file_and_folder">1 kartelë, 1 dosje</string>
+ <string name="file_list__footer__file_and_folders">1 kartelë, %1$d dosje</string>
+ <string name="file_list__footer__files">%1$d kartelë</string>
+ <string name="file_list__footer__files_and_folder">%1$d kartela, 1 dosje</string>
+ <string name="file_list__footer__files_and_folders">%1$d kartela, %2$d dosje</string>
+ <string name="share_dialog_title">Ndarje me të tjerët</string>
+ <string name="share_with_user_section_title">Ndajeni me përdorues dhe grupe</string>
+ <string name="share_no_users">Ende pa të dhëna të ndara me përdorues</string>
+ <string name="share_add_user_or_group">Shtoni Përdorues ose Grup</string>
+ <string name="share_via_link_section_title">Lidhje ndarjeje</string>
+ <string name="share_via_link_expiration_date_label">Caktoni datë skadimi</string>
+ <string name="share_via_link_password_label">Mbroje me fjalëkalim</string>
+ <string name="share_via_link_password_title">E siguruar</string>
+ <string name="share_get_public_link_button">Merreni lidhjen</string>
+ <string name="share_search">Kërko</string>
+ <string name="search_users_and_groups_hint">Kërkoni për grupe dhe përdorues</string>
+ <string name="share_group_clarification">%1$s (grup)</string>
+ <string name="share_sharee_unavailable">Na ndjeni, versioni juaj i shërbyesit nuk lejon ndarje me përdorues brenda klientësh.
+ \nJu lutemi, lidhuni me përgjegjësin tuaj</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Otvori</string>
<string name="prefs_category_general">Opšte</string>
<string name="prefs_accounts">Nalozi</string>
<string name="prefs_manage_accounts">Upravljaj nalozima</string>
<string name="filedetails_size">Veličina:</string>
<string name="filedetails_type">Tip:</string>
<string name="filedetails_download">Preuzmi</string>
- <string name="action_share_file">Podeli prečicu</string>
+ <string name="action_share">Deljenje</string>
<string name="common_yes">Da</string>
<string name="common_no">Ne</string>
<string name="common_ok">Ok</string>
- <string name="common_cancel_upload">Otkaži otpremanje</string>
<string name="common_cancel">Otkaži</string>
<string name="common_error">Greška</string>
<string name="common_error_unknown">Nepoznata greška</string>
<string name="empty"></string>
<string name="prefs_category_accounts">Nalozi</string>
<string name="folder_picker_choose_button_text">Izaberi</string>
+ <string name="share_via_link_section_title">Veza deljenja</string>
+ <string name="share_via_link_expiration_date_label">Datum isteka</string>
+ <string name="share_via_link_password_label">Zaštita lozinkom</string>
+ <string name="share_search">Traži</string>
</resources>
<string name="drawer_item_settings">Поставке</string>
<string name="drawer_item_logs">Записници</string>
<string name="drawer_close">Затвори</string>
+ <string name="drawer_open">Отвори</string>
<string name="prefs_category_general">Опште</string>
<string name="prefs_category_more">Остало</string>
<string name="prefs_accounts">Налози</string>
<string name="filedetails_created">Направљен:</string>
<string name="filedetails_modified">Измењен:</string>
<string name="filedetails_download">Преузми</string>
- <string name="filedetails_sync_file">Освежи фајл</string>
<string name="filedetails_renamed_in_upload_msg">Фајл је преименован у %1$s током отпремања</string>
<string name="list_layout">Распоред листе</string>
- <string name="action_share_file">Веза дељења</string>
- <string name="action_unshare_file">Не дели везом</string>
+ <string name="action_share">Дељење</string>
<string name="common_yes">Да</string>
<string name="common_no">Не</string>
<string name="common_ok">У реду</string>
- <string name="common_cancel_download">Откажи преузимање</string>
- <string name="common_cancel_upload">Откажи отпремање</string>
<string name="common_cancel">Откажи</string>
<string name="common_save_exit">Сачувај и изађи</string>
<string name="common_error">Грешка</string>
<string name="unfavorite">Неомиљени</string>
<string name="common_rename">Преименуј</string>
<string name="common_remove">Уклони</string>
- <string name="confirmation_remove_alert">Желите да уклоните %1$s?</string>
+ <string name="confirmation_remove_file_alert">Желите да уклоните %1$s?</string>
<string name="confirmation_remove_folder_alert">Желите да уклоните %1$s и њен садржај?</string>
<string name="confirmation_remove_local">Само локално</string>
- <string name="confirmation_remove_folder_local">Само локални садржај</string>
- <string name="confirmation_remove_remote">Уклони са сервера</string>
- <string name="confirmation_remove_remote_and_local">Удаљено и локално</string>
+ <string name="confirmation_remove_folder_local">Само локално</string>
<string name="remove_success_msg">Уклањање успешно</string>
<string name="remove_fail_msg">Уклањање неуспешно</string>
<string name="rename_dialog_title">Унесите нов назив</string>
<string name="downloader_download_file_not_found">Фајл није више доступан на серверу</string>
<string name="prefs_category_accounts">Налози</string>
<string name="prefs_add_account">Додај налог</string>
- <string name="auth_redirect_non_secure_connection_title">Безбедна веза је преусмерена на небезбедну руту</string>
<string name="actionbar_logger">Записници</string>
<string name="log_send_history_button">Историјат слања</string>
<string name="log_send_no_mail_app">Нема начина за слање записника. Инсталирајте апликацију е-поште!</string>
<string name="move_file_invalid_overwrite">Фајл већ постоји у одредишној фасцикли</string>
<string name="move_file_error">Дошло је до грешке при премештању фајла или фасцикле</string>
<string name="forbidden_permissions_move">да преместите овај фајл</string>
+ <string name="copy_file_invalid_overwrite">Фајл већ постоји у одредишној фасцикли</string>
+ <string name="forbidden_permissions_copy">да копирате овај фајл</string>
<string name="prefs_category_instant_uploading">Тренутна отпремања</string>
<string name="prefs_category_security">Безбедност</string>
<string name="prefs_instant_video_upload_path_title">Путања отпремања видеа</string>
- <string name="download_folder_failed_content">Преузимање фасцикле %1$s не може бити довршено</string>
<string name="shared_subject_header">дељено</string>
<string name="with_you_subject_header">са вама</string>
- <string name="subject_token">%1$s подели „%2$s“ са вама</string>
+ <string name="subject_user_shared_with_you">%1$s подели „%2$s“ са вама</string>
<string name="auth_refresh_button">Освежи везу</string>
<string name="auth_host_address">Адреса сервера</string>
<string name="common_error_out_memory">Нема довољно меморије</string>
<string name="file_list__footer__files">%1$d фајлова</string>
<string name="file_list__footer__files_and_folder">%1$d фајлова, 1 фасцикла</string>
<string name="file_list__footer__files_and_folders">%1$d фајлова, %2$d фасцикли</string>
+ <string name="share_dialog_title">Дељење</string>
+ <string name="share_via_link_section_title">Веза дељења</string>
+ <string name="share_via_link_expiration_date_label">Постави датум истека</string>
+ <string name="share_via_link_password_label">Заштићено лозинком</string>
+ <string name="share_search">Тражи</string>
</resources>
<item>Biggest - Smallest</item>-->
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<string name="drawer_item_accounts">Accounts</string>-->
+ <string name="drawer_item_all_files">Alla filer</string>
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_settings">Inställningar</string>
+ <string name="drawer_item_logs">Loggar</string>
+ <string name="drawer_close">Stäng</string>
+ <string name="drawer_open">Öppna</string>
<string name="prefs_category_general">Allmänt</string>
<string name="prefs_category_more">Mer</string>
<string name="prefs_accounts">Konton</string>
<string name="prefs_manage_accounts">Hantera konton</string>
+ <string name="prefs_passcode">Lösenordslås</string>
<string name="prefs_instant_upload">Direktuppladdning av kamerabilder</string>
<string name="prefs_instant_upload_summary">Direktuppladning av bilder tagna med kameran</string>
<string name="prefs_instant_video_upload">Direktuppladning av video</string>
<string name="uploader_info_uploading">Laddar upp</string>
<string name="file_list_seconds_ago">sekunder sedan</string>
<string name="file_list_empty">Ingenting här. Ladda upp något!</string>
+ <string name="file_list_loading">Laddar...</string>
+ <string name="file_list_no_app_for_file_type">Ingen app funnen för filtypen!</string>
<string name="local_file_list_empty">Det finns inga filer i den här mappen.</string>
<string name="filedetails_select_file">Peka på en fil för att visa mer information.</string>
<string name="filedetails_size">Storlek:</string>
<string name="filedetails_created">Skapad:</string>
<string name="filedetails_modified">Ändrad:</string>
<string name="filedetails_download">Ladda ner</string>
- <string name="filedetails_sync_file">Ladda om fil</string>
+ <string name="filedetails_sync_file">Synkronisera</string>
<string name="filedetails_renamed_in_upload_msg">Filen bytte namn till %1$s under uppladdningen</string>
- <string name="action_share_file">Dela länk</string>
- <string name="action_unshare_file">Sluta dela länk</string>
+ <string name="list_layout">Listvy</string>
+ <string name="action_share">Dela</string>
<string name="common_yes">Ja</string>
<string name="common_no">Nej</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Avbryt nedladdning</string>
- <string name="common_cancel_upload">Avbryt uppladdning</string>
+ <string name="common_cancel_sync">Stoppa synkroniseringen</string>
<string name="common_cancel">Avbryt</string>
<string name="common_save_exit">Spara & Avsluta</string>
<string name="common_error">Fel</string>
<string name="foreign_files_local_text">Lokal: %1$s</string>
<string name="foreign_files_remote_text">Fjärr: %1$s</string>
<string name="upload_query_move_foreign_files">Det finns inte tillräckligt med ledigt utrymme för att kopiera de valda filerna till %1$s mappen. Skulle du vilja flytta dem istället?</string>
+ <string name="pass_code_enter_pass_code">Var god ange ditt lösenord</string>
+ <string name="pass_code_configure_your_pass_code">Skriv in ditt lösenord</string>
+ <string name="pass_code_configure_your_pass_code_explanation">Lösenordet kommer efterfrågas varje gång du startar appen</string>
+ <string name="pass_code_reenter_your_pass_code">Var god ange ditt lösenord igen</string>
+ <string name="pass_code_remove_your_pass_code">Ta bort lösenordet</string>
+ <string name="pass_code_mismatch">Lösenorden matchar inte</string>
+ <string name="pass_code_wrong">Ogiltigt lösenord</string>
+ <string name="pass_code_removed">Lösenord borttaget</string>
+ <string name="pass_code_stored">Lösenord sparat</string>
<string name="media_notif_ticker">%1$ musikspelare</string>
<string name="media_state_playing">%1$s (spelar)</string>
<string name="media_state_loading">%1$s (buffrar)</string>
<string name="auth_no_net_conn_title">Ingen nätverksanslutning</string>
<string name="auth_nossl_plain_ok_title">Säker anslutning inte tillgänglig.</string>
<string name="auth_connection_established">Anslutning etablerad</string>
+ <string name="auth_testing_connection">Testar anslutning</string>
<string name="auth_not_configured_title">Felaktig konfiguration</string>
<string name="auth_account_not_new">En användare med samma namn och server finns redan i denna aparat</string>
<string name="auth_account_not_the_same">Den angivna användaren matchar inte användaren för detta konto</string>
<string name="auth_fail_get_user_name">Din server returnerar inte ett korrekt användare id, vänligen kontakta en administratör
</string>
<string name="auth_can_not_auth_against_server">Kan inte autentisera mot servern</string>
+ <string name="auth_account_does_not_exist">Det finns inget konto på denna enhet än</string>
<string name="favorite">Favorit</string>
<string name="unfavorite">Avfavoritisera</string>
<string name="common_rename">Byt namn</string>
<string name="common_remove">Radera</string>
- <string name="confirmation_remove_alert">Vill du verkligen ta bort %1$s?</string>
+ <string name="confirmation_remove_file_alert">Vill du verkligen ta bort %1$s?</string>
<string name="confirmation_remove_folder_alert">Vill du verkligen ta bort %1$s och dess innehåll?</string>
<string name="confirmation_remove_local">Endast lokalt</string>
- <string name="confirmation_remove_folder_local">Endast lokalt innehåll</string>
- <string name="confirmation_remove_remote">Radera från server</string>
- <string name="confirmation_remove_remote_and_local">Både server och lokalt</string>
+ <string name="confirmation_remove_folder_local">Endast lokalt</string>
+ <string name="confirmation_remove_remote">Från servern</string>
+ <string name="confirmation_remove_remote_and_local">Fjärr & lokal</string>
<string name="remove_success_msg">Lyckad radering</string>
<string name="remove_fail_msg">Radering kunde inte slutföras</string>
<string name="rename_dialog_title">Ange ett nytt namn</string>
<string name="sync_file_nothing_to_do_msg">Filinnehåll redan synkroniserat</string>
<string name="create_dir_fail_msg">Mapp kunde inte skapas</string>
<string name="filename_forbidden_characters">Förbjudna tecken är: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">Filnamnet innehåller minst ett ogiltigt tecken</string>
<string name="filename_empty">Filnamnet får inte lämnas blankt</string>
<string name="wait_a_moment">Var god vänta</string>
<string name="filedisplay_unexpected_bad_get_content">Oväntat problem; prova annat program för aktuell fil</string>
<string name="filedisplay_no_file_selected">Ingen fil vald</string>
<string name="activity_chooser_title">Sänd länk till ...</string>
+ <string name="wait_for_tmp_copy_from_private_storage">Kopierar fil från privat lagring</string>
<string name="oauth_check_onoff">Logga in med oAuth2.</string>
<string name="oauth_login_connection">Ansluter till oAuth2 servern…</string>
<string name="ssl_validator_header">Webbplatsens identitet kunde inte verifieras</string>
<string name="ssl_validator_label_validity_to">Till:</string>
<string name="ssl_validator_label_signature">Signatur:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritm:</string>
+ <string name="digest_algorithm_not_available">Hashfunktionen är inte tillgänglig på din telefon.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Fingeravtryck:</string>
+ <string name="certificate_load_problem">Certifikatet kan inte laddas</string>
<string name="ssl_validator_null_cert">Certifikatet kunde inte visas.</string>
<string name="ssl_validator_no_info_about_error">- Ingen information om felet</string>
<string name="placeholder_sentence">Detta är en platshållare</string>
<string name="instant_upload_on_wifi">Ladda upp bilder endast via WiFi</string>
<string name="instant_video_upload_on_wifi">Ladda upp videos endast via WIFI</string>
<string name="instant_upload_path">/DirektUppladdning</string>
+ <string name="conflict_title">Filkonflikt</string>
+ <string name="conflict_message">Vilka filer vill du behålla? Om du markerar båda kommer den lokala filen få ett nummer tillagt i slutet på filnamnet.</string>
<string name="conflict_keep_both">Behåll båda</string>
+ <string name="conflict_use_local_version">lokala versionen</string>
+ <string name="conflict_use_server_version">serverversionen</string>
<string name="preview_image_description">Förhandsvisa bild</string>
<string name="preview_image_error_unknown_format">Denna bild kan inte visas</string>
<string name="error__upload__local_file_not_copied">%1$s kunde inte kopieras till %2$s lokal mapp</string>
<string name="share_link_file_error">Ett fel uppstod vid försök att dela denna fil eller mapp</string>
<string name="unshare_link_file_no_exist">Lyckades ej sluta dela. Vänligen kontrollera om filen existerar</string>
<string name="unshare_link_file_error">Ett fel uppstod vid försök att sluta dela denna fil eller mapp</string>
+ <string name="update_link_file_no_exist">Kunde inte uppdatera. Var god kolla om filen existerar.</string>
+ <string name="update_link_file_error">Ett fel uppstod medan den delade länken försökte uppdateras</string>
<string name="share_link_password_title">Ange ett lösenord</string>
<string name="share_link_empty_password">Du måste ange ett lösenord</string>
<string name="activity_chooser_send_file_title">Skicka</string>
<string name="forbidden_permissions_delete">att radera denna fil</string>
<string name="share_link_forbidden_permissions">att dela denna fil</string>
<string name="unshare_link_forbidden_permissions">att avbryta delningen utav denna fil</string>
+ <string name="update_link_forbidden_permissions">för att uppdatera denna delade länken</string>
<string name="forbidden_permissions_create">att skapa filen</string>
<string name="uploader_upload_forbidden_permissions">att ladda upp i den här mappen</string>
<string name="downloader_download_file_not_found">Filen är inte längre tillgänglig på servern</string>
<string name="prefs_category_accounts">Konton</string>
<string name="prefs_add_account">Lägg till konto</string>
- <string name="auth_redirect_non_secure_connection_title">Säker anslutning är omdirigerad till en osäker väg.</string>
+ <string name="auth_redirect_non_secure_connection_title">Den säkra kopplingen omdirigeras via en osäker rutt.</string>
<string name="actionbar_logger">Loggar</string>
<string name="log_send_history_button">Skickat historik</string>
<string name="log_send_no_mail_app">Ingen app för att skicka loggar hittades. Installera mail appen!</string>
<string name="move_file_invalid_overwrite">Filen existerar redan i destinationsmappen</string>
<string name="move_file_error">Ett fel uppstod vid försök att flytta denna fil eller mapp</string>
<string name="forbidden_permissions_move">att flytta den här filen</string>
+ <string name="copy_file_not_found">Kunde inte kopiera. Var god kontrollera om filen existerar.</string>
+ <string name="copy_file_invalid_into_descendent">Det är inte möjligt att kopiera en mapp in i en egen undermapp</string>
+ <string name="copy_file_invalid_overwrite">Filen existerar redan i destinationsmappen</string>
+ <string name="copy_file_error">Ett fel uppstod, kunde inte kopiera filen eller mappen</string>
+ <string name="forbidden_permissions_copy">att kopiera denna fil</string>
<string name="prefs_category_instant_uploading">Direktuppladning</string>
<string name="prefs_category_security">Säkerhet</string>
<string name="prefs_instant_video_upload_path_title">Uppladdnings-sökväg för video</string>
- <string name="download_folder_failed_content">Neddladning utav %1$s mappen kunde inte slutföras</string>
+ <string name="sync_folder_failed_content">Synkronisering av %1$s mapp kunde inte slutföras</string>
+ <string name="shared_subject_header">delad</string>
+ <string name="with_you_subject_header">med dig</string>
+ <string name="subject_user_shared_with_you">%1$s delade \"%2$s\" med dig</string>
+ <string name="subject_shared_with_you">\"%1$s\" har delats med dig</string>
+ <string name="auth_refresh_button">Uppdatera uppkopplingen</string>
<string name="auth_host_address">Serveradress</string>
+ <string name="common_error_out_memory">Inte tillräckligt med minne</string>
+ <string name="username">Användarnamn</string>
+ <string name="file_list__footer__folder">1 mapp</string>
+ <string name="file_list__footer__folders">%1$d mappar</string>
+ <string name="file_list__footer__file">1 fil</string>
+ <string name="file_list__footer__file_and_folder">1 fil, 1 mapp</string>
+ <string name="file_list__footer__file_and_folders">1 fil, %1$d mappar</string>
+ <string name="file_list__footer__files">%1$d filer</string>
+ <string name="file_list__footer__files_and_folder">%1$d filer, 1 mapp</string>
+ <string name="file_list__footer__files_and_folders">%1$d filer, %2$d mappar</string>
+ <string name="share_dialog_title">Dela</string>
+ <string name="share_with_user_section_title">Dela med användare och grupper</string>
+ <string name="share_no_users">Ingen data delar med användare än</string>
+ <string name="share_add_user_or_group">Lägg till Användare eller Grupp</string>
+ <string name="share_via_link_section_title">Dela länk</string>
+ <string name="share_via_link_expiration_date_label">Sätt utgångsdatum</string>
+ <string name="share_via_link_password_label">Lösenordsskydda</string>
+ <string name="share_via_link_password_title">Säkrad</string>
+ <string name="share_get_public_link_button">Hämta länk</string>
+ <string name="share_search">Sök</string>
+ <string name="search_users_and_groups_hint">Sök användare och grupper</string>
+ <string name="share_group_clarification">%1$s (grupp)</string>
+ <string name="share_sharee_unavailable">Tyvärr tillåter inte din serverversion delning med användare inom klienter. \nVar god kontakta din administrator.</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">திறக்க</string>
<string name="prefs_category_general">பொதுவான</string>
<string name="prefs_category_more">மேலதிக</string>
<string name="prefs_accounts">கணக்குகள்</string>
<string name="filedetails_modified">மாற்றப்பட்டது:</string>
<string name="filedetails_download">பதிவிறக்குக</string>
<string name="filedetails_renamed_in_upload_msg">பதிவேற்றும்போது கோப்பின் பெயரானது %1$s ஆக பெயர்மாற்றப்பட்டது</string>
+ <string name="action_share">பகிர்வு</string>
<string name="common_yes">ஆம்</string>
<string name="common_no">இல்லை</string>
<string name="common_ok">சரி </string>
- <string name="common_cancel_download">பதிவிறக்கலை இரத்துசெய்க</string>
- <string name="common_cancel_upload">பதிவேற்றலை இரத்து செய்க</string>
<string name="common_cancel">இரத்து செய்க</string>
<string name="common_save_exit">சேமிக்க மற்றும் amp; வெளியேறு</string>
<string name="common_error">வழு</string>
<string name="common_rename">பெயர்மாற்றம்</string>
<string name="common_remove">அகற்றுக</string>
<string name="confirmation_remove_local">உள்ளூர் மட்டும்</string>
- <string name="confirmation_remove_folder_local">இடத்துரி உள்ளடக்கங்கள் மட்டும்</string>
- <string name="confirmation_remove_remote">சேவையகத்திலிருந்து அகற்றுக</string>
- <string name="confirmation_remove_remote_and_local">தொலைவு மற்றும் உள்ளூர்</string>
+ <string name="confirmation_remove_folder_local">உள்ளூர் மட்டும்</string>
<string name="remove_success_msg">வெற்றிகரமாக அகற்றப்பட்டது</string>
<string name="remove_fail_msg">நீக்கலை நிறைவு செய்ய முடியவில்லை</string>
<string name="rename_dialog_title">புதிய பெயரொன்றை நுழைக்க</string>
<string name="prefs_category_accounts">கணக்குகள்</string>
<string name="folder_picker_choose_button_text">தெரிவுசெய்க </string>
<string name="auth_host_address">சேவையக முகவரி</string>
+ <string name="share_via_link_expiration_date_label">காலாவதி தேதியை குறிப்பிடுக</string>
+ <string name="share_via_link_password_label">கடவுச்சொல்லை பாதுகாத்தல்</string>
+ <string name="share_search">தேடுதல்</string>
</resources>
<string name="drawer_item_settings">ตั้งค่า</string>
<string name="drawer_item_logs">บันทึก</string>
<string name="drawer_close">ปิด</string>
+ <string name="drawer_open">เปิด</string>
<string name="prefs_category_general">ทั่วไป</string>
<string name="prefs_category_more">เพิ่มเติม</string>
<string name="prefs_accounts">บัญชี</string>
<string name="file_list_seconds_ago">วินาที ก่อนหน้านี้</string>
<string name="file_list_empty">ยังไม่มีไฟล์ใดๆเลย ลองอัพโหลดดูสิ!</string>
<string name="file_list_loading">กำลังโหลด...</string>
+ <string name="file_list_no_app_for_file_type">ไม่พบแอพฯ ที่จะใช้เปิดไฟล์ประเภทนี้!</string>
<string name="local_file_list_empty">ยังไม่มีไฟล์ในโฟลเดอร์นี้</string>
<string name="filedetails_select_file">แตะที่ไฟล์ เพื่อแสดงข้อมูลเพิ่มเติม</string>
<string name="filedetails_size">ขนาด:</string>
<string name="filedetails_created">สร้างเมื่อ:</string>
<string name="filedetails_modified">แก้ไขเมื่อ:</string>
<string name="filedetails_download">ดาวน์โหลด</string>
- <string name="filedetails_sync_file">à¸\9fืà¹\89à¸\99à¸\9fูà¹\84à¸\9fลà¹\8c</string>
+ <string name="filedetails_sync_file">à¸\9bระสาà¸\99à¸\82à¹\89à¸à¸¡à¸¹à¸¥</string>
<string name="filedetails_renamed_in_upload_msg">ไฟล์ได้ถูกเปลี่ยนชื่อเป็น %1$s ในระหว่างการอัพโหลด</string>
<string name="list_layout">เค้าโครงรายการ</string>
- <string name="action_share_file">แชร์ลิงค์</string>
- <string name="action_unshare_file">ยกเลิกการแชร์ลิงค์</string>
+ <string name="action_share">แชร์</string>
<string name="common_yes">ตกลง</string>
<string name="common_no">ไม่ตกลง</string>
<string name="common_ok">ตกลง</string>
- <string name="common_cancel_download">ยกเลิกการดาวน์โหลด</string>
- <string name="common_cancel_upload">ยกเลิกการอัพโหลด</string>
+ <string name="common_cancel_sync">ยกเลิกการประสานข้อมูล</string>
<string name="common_cancel">ยกเลิก</string>
<string name="common_save_exit">บันทึก & ออก</string>
<string name="common_error">ข้อผิดพลาด</string>
<string name="unfavorite">ออกจากรายการโปรด</string>
<string name="common_rename">เปลี่ยนชื่อ</string>
<string name="common_remove">ลบออก</string>
- <string name="confirmation_remove_alert">คุณต้องการที่จะลบ %1$s?</string>
+ <string name="confirmation_remove_file_alert">คุณต้องการที่จะลบ %1$s?</string>
<string name="confirmation_remove_folder_alert">คุณต้องการที่จะลบ %1$s และเนื้อหาของมัน?</string>
<string name="confirmation_remove_local">เฉพาะต้นทางเท่านั้น</string>
- <string name="confirmation_remove_folder_local">à¹\80à¸\99ืà¹\89à¸à¸«à¸²ต้นทางเท่านั้น</string>
- <string name="confirmation_remove_remote">ลà¸\9aà¸à¸à¸\81à¸\88าà¸\81à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วà¸à¸£à¹\8c</string>
- <string name="confirmation_remove_remote_and_local">à¸\95à¹\89à¸\99à¸\97าà¸\87à¹\81ละà¸\9bลายทาง</string>
+ <string name="confirmation_remove_folder_local">à¹\80à¸\89à¸\9eาะต้นทางเท่านั้น</string>
+ <string name="confirmation_remove_remote">จากเซิร์ฟเวอร์</string>
+ <string name="confirmation_remove_remote_and_local">รีà¹\82มà¸\97 & à¸\95à¹\89à¸\99ทาง</string>
<string name="remove_success_msg">ลบเรียบร้อยแล้ว</string>
<string name="remove_fail_msg">ไม่สามารถลบได้</string>
<string name="rename_dialog_title">กรอกชื่อใหม่</string>
<string name="ssl_validator_label_validity_to">ถึง:</string>
<string name="ssl_validator_label_signature">ลายเซ็นต์:</string>
<string name="ssl_validator_label_signature_algorithm">อัลกอริทึ่ม:</string>
+ <string name="digest_algorithm_not_available">อัลกอริทึมย่อยนี้ไม่สามารถใช้งานบนโทรศัพท์ของคุณ</string>
+ <string name="ssl_validator_label_certificate_fingerprint">ลายนิ้วมือ:</string>
+ <string name="certificate_load_problem">มีปัญหาในการโหลดใบรับรอง</string>
<string name="ssl_validator_null_cert">ไม่สามารถแสดงใบรับรอง</string>
<string name="ssl_validator_no_info_about_error">- ไม่มีข้อมูลเกี่ยวกับข้อผิดพลาด</string>
<string name="placeholder_sentence">นี่คือ placeholder</string>
<string name="conflict_title">ไฟล์ที่ขัดแย้ง</string>
<string name="conflict_message">ไฟล์ใดที่คุณต้องการที่จะเก็บ? หากคุณเลือกทั้งสองรุ่น ไฟล์ต้นทางจะมีจำนวนชื่อเพิ่ม</string>
<string name="conflict_keep_both">เก็บไว้ทั้งสองอย่าง</string>
- <string name="conflict_use_local_version">à¹\83à¸\8aà¹\89รุà¹\88à¸\99à¸\97ัà¹\88วà¹\84à¸\9b</string>
- <string name="conflict_use_server_version">à¹\83à¸\8aà¹\89รุà¹\88à¸\99à¸\82à¸à¸\87เซิร์ฟเวอร์</string>
+ <string name="conflict_use_local_version">à¹\80วà¸à¸£à¹\8cà¸\8aัà¸\99à¸\95à¹\89à¸\99à¸\97าà¸\87</string>
+ <string name="conflict_use_server_version">à¹\80วà¸à¸£à¹\8cà¸\8aัà¸\99เซิร์ฟเวอร์</string>
<string name="preview_image_description">แสดงรูปภาพตัวอย่าง</string>
<string name="preview_image_error_unknown_format">ไม่สามารถแสดงรูปภาพนี้ได้</string>
<string name="error__upload__local_file_not_copied">%1$s ไม่สามารถคัดลอกไปยังโฟลเดอร์ %2$s ในเครื่อง</string>
<string name="forbidden_permissions_delete">เพื่อลบไฟล์นี้</string>
<string name="share_link_forbidden_permissions">เพื่อแชร์ไฟล์นี้</string>
<string name="unshare_link_forbidden_permissions">เพื่อเลิกแชร์ไฟล์นี้</string>
+ <string name="update_link_forbidden_permissions">เพื่ออัพเดทลิงค์นี้ที่ถูกแชร์</string>
<string name="forbidden_permissions_create">เพื่อสร้างไฟล์</string>
<string name="uploader_upload_forbidden_permissions">เพื่ออัพโหลดในโฟลเดอร์นี้</string>
<string name="downloader_download_file_not_found">ไฟล์ไม่พร้อมใช้งานบนเซิร์ฟเวอร์</string>
<string name="prefs_category_accounts">บัญชี</string>
<string name="prefs_add_account">เพิ่มบัญชี</string>
- <string name="auth_redirect_non_secure_connection_title">à¸\81ารà¹\80à¸\8aืà¹\88à¸à¸¡à¸\95à¹\88à¸à¸\97ีà¹\88à¸\9bลà¸à¸\94ภัยà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\80สà¹\89à¸\99à¸\97าà¸\87à¹\84à¸\9bยัà¸\87à¹\80สà¹\89à¸\99à¸\97าà¸\87ที่ไม่ปลอดภัย</string>
+ <string name="auth_redirect_non_secure_connection_title">à¹\80à¸\8aืà¹\88à¸à¸¡à¸\95à¹\88à¸à¸\97ีà¹\88à¸\9bลà¸à¸\94ภัยà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\80สà¹\89à¸\99à¸\97าà¸\87à¸\9cà¹\88าà¸\99à¹\80ราà¹\80à¸\95à¸à¸£à¹\8cที่ไม่ปลอดภัย</string>
<string name="actionbar_logger">บันทึก</string>
<string name="log_send_history_button">ส่งประวัติ</string>
<string name="log_send_no_mail_app">ไม่พบการส่งบันทึกของแอพฯ ติดตั้งแอพฯเมล!</string>
<string name="move_file_invalid_overwrite">มีไฟล์อยู่แล้วในโฟลเดอร์ปลายทาง</string>
<string name="move_file_error">เกิดข้อผิดพลาดขณะพยายามที่จะย้ายไฟล์หรือโฟลเดอร์นี้</string>
<string name="forbidden_permissions_move">เพื่อย้ายไฟล์นี้</string>
+ <string name="copy_file_not_found">ไม่สามารถคัดลอก กรุณาตรวจสอบว่ามีไฟล์นั้นอยู่</string>
+ <string name="copy_file_invalid_into_descendent">มันเป็นไปไม่ได้ที่จะคัดลอกลงในโฟลเดอร์โฟลเดอร์ย่อย</string>
+ <string name="copy_file_invalid_overwrite">มีไฟล์อยู่แล้วในโฟลเดอร์ปลายทาง</string>
+ <string name="copy_file_error">เกิดข้อผิดพลาดขณะพยายามคัดลอกไฟล์หรือโฟลเดอร์นี้</string>
+ <string name="forbidden_permissions_copy">เพื่อคัดลอกไฟล์นี้</string>
<string name="prefs_category_instant_uploading">อัพโหลดทันที</string>
<string name="prefs_category_security">ความปลอดภัย</string>
<string name="prefs_instant_video_upload_path_title">อัพโหลดเส้นทางวิดีโอ</string>
- <string name="download_folder_failed_content">การดาวน์โหลดโฟลเดอร์ %1$s อาจไม่สำเร็จ</string>
+ <string name="sync_folder_failed_content">ประสานข้อมูลโฟลเดอร์ %1$s ไม่สำเร็จ</string>
<string name="shared_subject_header">ถูกแชร์</string>
<string name="with_you_subject_header">กับคุณ</string>
- <string name="subject_token">%1$s ได้แชร์ \"%2$s\" กับคุณ</string>
- <string name="saml_subject_token">\"%1$s\" ได้ถูกแชร์กับคุณ</string>
+ <string name="subject_user_shared_with_you">%1$s ได้แชร์ \"%2$s\" กับคุณ</string>
+ <string name="subject_shared_with_you">\"%1$s\" ได้ถูกแชร์กับคุณ</string>
<string name="auth_refresh_button">ฟื้นฟูการเชื่อมต่อ</string>
<string name="auth_host_address">ที่อยู่เซิร์ฟเวอร์</string>
<string name="common_error_out_memory">หน่วยความจำไม่พอ</string>
<string name="file_list__footer__files">%1$d ไฟล์</string>
<string name="file_list__footer__files_and_folder">%1$d ไฟล์, 1 โฟลเดอร์</string>
<string name="file_list__footer__files_and_folders">%1$d ไฟล์, %2$d โฟลเดอร์</string>
+ <string name="share_dialog_title">การแชร์ข้อมูล</string>
+ <string name="share_with_user_section_title">แชร์กับผู้ใช้และกลุ่ม</string>
+ <string name="share_no_users">ยังไม่มีข้อมูลที่แชร์กับผู้ใช้ในตอนนี้</string>
+ <string name="share_add_user_or_group">เพิ่มผู้ใช่หรือกลุ่ม</string>
+ <string name="share_via_link_section_title">แชร์ลิงค์</string>
+ <string name="share_via_link_expiration_date_label">กำหนดวันที่หมดอายุ</string>
+ <string name="share_via_link_password_label">รหัสผ่านป้องกัน</string>
+ <string name="share_via_link_password_title">ความปลอดภัย</string>
+ <string name="share_get_public_link_button">รับลิงค์</string>
+ <string name="share_search">ค้นหา</string>
+ <string name="search_users_and_groups_hint">ค้นหาผู้ใช้และกลุ่ม</string>
+ <string name="share_group_clarification">%1$s (กลุ่ม)</string>
+ <string name="share_sharee_unavailable">ขออภัย รุ่นเซิร์ฟเวอร์ของคุณไม่อนุญาตให้แชร์กับผู้ใช้ภายในไคลเอนต์
+\nกรุณาติดต่อผู้ดูแลระบบ</string>
</resources>
<string name="drawer_item_settings">Ayarlar</string>
<string name="drawer_item_logs">Günlükler</string>
<string name="drawer_close">Kapat</string>
+ <string name="drawer_open">Aç</string>
<string name="prefs_category_general">Genel</string>
<string name="prefs_category_more">Daha fazla</string>
<string name="prefs_accounts">Hesaplar</string>
<string name="file_list_seconds_ago">saniyeler önce</string>
<string name="file_list_empty">Burada hiçbir şey yok. Bir şeyler yükleyin!</string>
<string name="file_list_loading">Yükleniyor...</string>
+ <string name="file_list_no_app_for_file_type">Dosya tipi için uygulama bulunamadı!</string>
<string name="local_file_list_empty">Bu klasörde dosya yok.</string>
<string name="filedetails_select_file">Ek bilgileri görmek için dosyaya dokunun.</string>
<string name="filedetails_size">Boyut:</string>
<string name="filedetails_created">Oluşturulma:</string>
<string name="filedetails_modified">Değiştirilme:</string>
<string name="filedetails_download">İndir</string>
- <string name="filedetails_sync_file">Dosyayı yenile</string>
+ <string name="filedetails_sync_file">Eşitleme</string>
<string name="filedetails_renamed_in_upload_msg">Dosya adı, yükleme sırasında %1$s olarak değiştirildi</string>
<string name="list_layout">Liste Yerleşimi</string>
- <string name="action_share_file">Paylaşma bağlantısı</string>
- <string name="action_unshare_file">Bağlantı paylaşımını kaldır</string>
+ <string name="action_share">Paylaş</string>
<string name="common_yes">Evet</string>
<string name="common_no">Hayır</string>
<string name="common_ok">Tamam</string>
- <string name="common_cancel_download">İndirmeyi iptal et</string>
- <string name="common_cancel_upload">Yüklemeyi iptal et</string>
+ <string name="common_cancel_sync">Eşitlemeyi iptal et</string>
<string name="common_cancel">İptal</string>
<string name="common_save_exit">Kaydet ve Çık</string>
<string name="common_error">Hata</string>
</string>
<string name="auth_can_not_auth_against_server">Bu sunucuya karşı kimlik doğrulama yapılamaz</string>
<string name="auth_account_does_not_exist">Hesap henüz cihazda mevcut değil</string>
- <string name="favorite">Sık kullanılan</string>
+ <string name="favorite">Favorilere ekle</string>
<string name="unfavorite">Favoriden kaldır</string>
<string name="common_rename">Yeniden adlandır</string>
<string name="common_remove">Kaldır</string>
- <string name="confirmation_remove_alert">Gerçekten %1$s dosyasını kaldırmak istiyor musunuz?</string>
+ <string name="confirmation_remove_file_alert">Gerçekten %1$s dosyasını kaldırmak istiyor musunuz?</string>
<string name="confirmation_remove_folder_alert">Gerçekten %1$s ve içeriğini kaldırmak istediğinizden emin misiniz?</string>
<string name="confirmation_remove_local">Sadece yerel</string>
- <string name="confirmation_remove_folder_local">Sadece yerel içerik</string>
- <string name="confirmation_remove_remote">Sunucudan kaldır</string>
+ <string name="confirmation_remove_folder_local">Sadece yerel</string>
+ <string name="confirmation_remove_file_remote">Sunucudan</string>
<string name="confirmation_remove_remote_and_local">Uzak ve yerel</string>
<string name="remove_success_msg">Kaldırma başarılı</string>
<string name="remove_fail_msg">Kaldırma başarısız</string>
<string name="ssl_validator_label_validity_to">Bitiş:</string>
<string name="ssl_validator_label_signature">İmza:</string>
<string name="ssl_validator_label_signature_algorithm">Algoritma:</string>
+ <string name="digest_algorithm_not_available">Özümlenen algoritma telefonunuz için mevcut değil</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Parmak izi:</string>
+ <string name="certificate_load_problem">Sertifika yüklemesinde problem var.</string>
<string name="ssl_validator_null_cert">Sertifika gösterilemedi.</string>
<string name="ssl_validator_no_info_about_error">- Hata hakkında bilgi yok</string>
<string name="placeholder_sentence">Bu bir yer tutucudur</string>
<string name="instant_upload_on_wifi">Fotoğrafları sadece kablosuzda (WiFi) yükle</string>
<string name="instant_video_upload_on_wifi">Videoları sadece kablosuzda (WiFi) yükle</string>
<string name="instant_upload_path">/AnındaYükle</string>
+ <string name="conflict_title">Dosya çakışması</string>
+ <string name="conflict_message">Hangi dosyaları saklamak istiyorsunuz? Her ikisini de saklamayı seçerseniz yerel dosyanın adına bir sayı eklenecek.</string>
<string name="conflict_keep_both">İkisini de koru</string>
+ <string name="conflict_use_local_version">yerel sürüm</string>
+ <string name="conflict_use_server_version">sunucu sürümü</string>
<string name="preview_image_description">Resim önizleme</string>
<string name="preview_image_error_unknown_format">Bu resim gösterilemiyor</string>
<string name="error__upload__local_file_not_copied">%1$s, %2$s yerel klasörüne kopyalanamadı</string>
<string name="downloader_download_file_not_found">Bu dosya artık sunucuda mevcut değil</string>
<string name="prefs_category_accounts">Hesaplar</string>
<string name="prefs_add_account">Hesap ekle</string>
- <string name="auth_redirect_non_secure_connection_title">Güvenli bağlantı, güvenli olmayan bir rotaya yönlendirildi.</string>
+ <string name="auth_redirect_non_secure_connection_title">Güvenli bağlantı, güvenli olmayan bir rotaya yönlendiriliyor.</string>
<string name="actionbar_logger">Günlükler</string>
<string name="log_send_history_button">Geçmişi Gönder</string>
<string name="log_send_no_mail_app">Kayıtları göndermek için uygulama bulunamadı. E-posta uygulamasını yükleyin!</string>
<string name="move_file_invalid_overwrite">Dosya zaten hedef klasörde mevcut</string>
<string name="move_file_error">Bu dosya veya klasörü taşımaya çalışılırken bir hata oluştu</string>
<string name="forbidden_permissions_move">bu dosyayı taşımak için</string>
+ <string name="copy_file_not_found">Kopyalama başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin</string>
+ <string name="copy_file_invalid_into_descendent">Klasörü, kendi alt klasörüne kopyalamak mümkün değil</string>
+ <string name="copy_file_invalid_overwrite">Dosya zaten hedef klasörde mevcut</string>
+ <string name="copy_file_error">Bu dosya veya klasörü kopyalamaya çalışılırken bir hata oluştu</string>
+ <string name="forbidden_permissions_copy">bu dosyayı kopyalamak için</string>
<string name="prefs_category_instant_uploading">Anında Yüklemeler</string>
<string name="prefs_category_security">Güvenlik</string>
<string name="prefs_instant_video_upload_path_title">Video Yükleme Yolu</string>
- <string name="download_folder_failed_content">%1$s klasörün indirilmesi tamamlanamadı</string>
+ <string name="sync_folder_failed_content">%1$s klasörünün eşitlemesi tamamlanamadı</string>
<string name="shared_subject_header">sizinle</string>
<string name="with_you_subject_header">paylaştı</string>
- <string name="subject_token">%1$s, sizinle \"%2$s\" paylaşımını yaptı</string>
+ <string name="subject_user_shared_with_you">%1$s, sizinle \"%2$s\" paylaşımını yaptı</string>
+ <string name="subject_shared_with_you">\"%1$s\" sizinle paylaşıldı</string>
<string name="auth_refresh_button">Bağlantıyı yenile</string>
<string name="auth_host_address">Sunucu adresi</string>
<string name="common_error_out_memory">Yeterli hafıza yok</string>
<string name="file_list__footer__files">%1$d dosya</string>
<string name="file_list__footer__files_and_folder">%1$d dosya, 1 klasör</string>
<string name="file_list__footer__files_and_folders">%1$d dosya, %2$d klasör</string>
+ <string name="share_dialog_title">Paylaşım</string>
+ <string name="share_no_users">Henüz kullanıcılara paylaşılan veri yok</string>
+ <string name="share_add_user_or_group">Kullanıcı veya Grup ekle</string>
+ <string name="share_via_link_section_title">Paylaşma bağlantısı</string>
+ <string name="share_via_link_expiration_date_label">Son kullanma tarihini ayarla</string>
+ <string name="share_via_link_password_label">Parola koruması</string>
+ <string name="share_search">Ara</string>
+ <string name="search_users_and_groups_hint">Kullanıcı ve Grupları Ara</string>
+ <string name="share_group_clarification">%1$s (grup)</string>
+ <string name="share_sharee_unavailable">Üzgünüz sunucu versiyonunuz istemcilerdeki kullanıcılara paylaşıma izin vermiyor.
+\nLütfen yöneticinize başvurun</string>
</resources>
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<resources>
- <!--TODO re-enable when server-side folder size calculation is available
- <item>Biggest - Smallest</item>-->
- <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
- <!--<string name="drawer_item_accounts">Accounts</string>-->
- <!--TODO re-enable when "On Device" is available
- <string name="drawer_item_on_device">On device</string>-->
- <string name="empty"></string>
-</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">ئاچ</string>
<string name="prefs_category_general">ئادەتتىكى</string>
<string name="prefs_category_more">تېخىمۇ كۆپ</string>
<string name="prefs_accounts">ھېساباتلار</string>
<string name="filedetails_created">قۇرۇلغان ۋاقتى:</string>
<string name="filedetails_modified">ئۆزگەرتكەن ۋاقىت:</string>
<string name="filedetails_download">چۈشۈر</string>
+ <string name="action_share">ھەمبەھىر</string>
<string name="common_yes">ھەئە</string>
<string name="common_no">ياق</string>
<string name="common_ok">جەزملە</string>
- <string name="common_cancel_upload">يۈكلەشتىن ۋاز كەچ</string>
<string name="common_cancel">ۋاز كەچ</string>
<string name="common_save_exit">ساقلاپ چېكىن</string>
<string name="common_error">خاتالىق</string>
<string name="prefs_category_accounts">ھېساباتلار</string>
<string name="prefs_category_security">بىخەتەرلىك</string>
<string name="auth_host_address">مۇلازىمېتىر ئادرىسى</string>
+ <string name="share_dialog_title">ھەمبەھىر</string>
+ <string name="share_search">ئىزدە</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
- <string name="about_android">%1$s Android App</string>
+ <string name="about_android">%1$s Android Додаток</string>
<string name="about_version">версія %1$s</string>
<string name="actionbar_sync">Оновити account</string>
<string name="actionbar_upload">Відвантажити</string>
<string name="drawer_item_settings">Налаштування</string>
<string name="drawer_item_logs">Журнали</string>
<string name="drawer_close">Закрити</string>
+ <string name="drawer_open">Відкрити</string>
<string name="prefs_category_general">Основне</string>
<string name="prefs_category_more">Більше</string>
<string name="prefs_accounts">Облікові записи</string>
<string name="prefs_manage_accounts">Управління обліковими записами</string>
+ <string name="prefs_passcode">Захистити паролем</string>
<string name="prefs_instant_upload">Миттєві зображення</string>
<string name="prefs_instant_upload_summary">Миттєві зображення з камери</string>
<string name="prefs_instant_video_upload">Миттєві відео</string>
<string name="file_list_seconds_ago">секунди тому</string>
<string name="file_list_empty">Тут нічого немає. Відвантажте що-небудь!</string>
<string name="file_list_loading">Завантаження…</string>
+ <string name="file_list_no_app_for_file_type">Застосунку для цього типу файла не знайдено!</string>
<string name="local_file_list_empty">В цій теці немає файлів.</string>
<string name="filedetails_select_file">Натисніть на файлі для відображення додаткової інформації</string>
<string name="filedetails_size">Розмір:</string>
<string name="filedetails_created">Створено:</string>
<string name="filedetails_modified">Змінено:</string>
<string name="filedetails_download">Завантажити</string>
- <string name="filedetails_sync_file">Оновити файл</string>
<string name="filedetails_renamed_in_upload_msg">Файл був переіменований в %1$s протягом вивантаження</string>
- <string name="action_share_file">Опублікувати посилання</string>
- <string name="action_unshare_file">Видалити посилання</string>
+ <string name="list_layout">Вигляд списку</string>
+ <string name="action_share">Поділитися</string>
<string name="common_yes">Так</string>
<string name="common_no">Ні</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Скасувати завантаження</string>
- <string name="common_cancel_upload">Перервати завантаження</string>
<string name="common_cancel">Відмінити</string>
<string name="common_save_exit">Зберегти & Вихід</string>
<string name="common_error">Помилка</string>
<string name="foreign_files_local_text">Локально: %1$s</string>
<string name="foreign_files_remote_text">Віддалено: %1$s</string>
<string name="upload_query_move_foreign_files">Недостатньо місця для копіювання обраних файлів у теку %1$s. Чи бажаєте ви перемістити їх замість копіювання?</string>
+ <string name="pass_code_enter_pass_code">Будь ласка, введіть Ваш код доступу</string>
+ <string name="pass_code_configure_your_pass_code">Введіть Ваш код доступу</string>
+ <string name="pass_code_configure_your_pass_code_explanation">Код доступу буде запрошено кожного разу після завантаження додатку</string>
+ <string name="pass_code_reenter_your_pass_code">Будь ласка, введіть код доступу повторно</string>
+ <string name="pass_code_remove_your_pass_code">Видалити пароль</string>
+ <string name="pass_code_mismatch">Коди доступу не співпадають</string>
+ <string name="pass_code_wrong">Невірний код доступу</string>
+ <string name="pass_code_removed">Код доступу знято</string>
+ <string name="pass_code_stored">Код доступу збережено</string>
<string name="media_notif_ticker">%1$s музичний плеєр</string>
<string name="media_state_playing">%1$s (відтворення)</string>
<string name="media_state_loading">%1$s (завантаження)</string>
<string name="auth_can_not_auth_against_server">Аутентифікація на цьому сервері неможлива</string>
<string name="auth_account_does_not_exist">Користвача в пристрої не існуе</string>
<string name="favorite">Улюблений</string>
+ <string name="unfavorite">Прибрати з вибраного</string>
<string name="common_rename">Перейменувати</string>
<string name="common_remove">Видалити</string>
- <string name="confirmation_remove_alert">Ви дійсно бажаєте видалити %1$s?</string>
+ <string name="confirmation_remove_file_alert">Ви дійсно бажаєте видалити %1$s?</string>
<string name="confirmation_remove_folder_alert">Ви дійсно бажаєте видалити %1$s та весь вміст?</string>
<string name="confirmation_remove_local">Лише локально</string>
- <string name="confirmation_remove_folder_local">Ð\9bиÑ\88е локалÑ\8cний змÑ\96Ñ\81Ñ\82</string>
- <string name="confirmation_remove_remote">Ð\92идалиÑ\82и Ñ\96з серверу</string>
- <string name="confirmation_remove_remote_and_local">Віддалено і локально</string>
+ <string name="confirmation_remove_folder_local">Ð\9bиÑ\88е локалÑ\8cно</string>
+ <string name="confirmation_remove_remote">Ð\97 серверу</string>
+ <string name="confirmation_remove_remote_and_local">Видалити & локальний</string>
<string name="remove_success_msg">Успішно видалено</string>
<string name="remove_fail_msg">Видалення не вдалось</string>
<string name="rename_dialog_title">Введіть нове ім\'я</string>
<string name="instant_upload_on_wifi">Завантажувати зображення тільки через WiFi</string>
<string name="instant_video_upload_on_wifi">Завантажувати відео тільки через WiFi</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">Конфлікт файлу</string>
+ <string name="conflict_message">Які файли Ви хочете зберегти? Якщо Ви оберете обидві версії, локальний файл матиме номер, що додається до його імені.</string>
<string name="conflict_keep_both">Залишити обидва</string>
+ <string name="conflict_use_local_version">Локальна версія</string>
+ <string name="conflict_use_server_version">Версія сервера</string>
<string name="preview_image_description">Попередній перегляд зображення</string>
<string name="preview_image_error_unknown_format">Не вдалося показати зображення</string>
<string name="error__upload__local_file_not_copied">%1$s неможливо скопіювати до %2$s</string>
<string name="move_file_invalid_overwrite">Файл вже існує в теці призначення</string>
<string name="move_file_error">Виникла помилка при спробі перемістити файл або теку</string>
<string name="forbidden_permissions_move">перемістити цей файл</string>
+ <string name="copy_file_not_found">Неможливо скопіювати. Будь ласка, перевірте, чи існує файл</string>
+ <string name="copy_file_invalid_into_descendent">Неможливо копіювати теку до підтеки</string>
+ <string name="copy_file_invalid_overwrite">Файл вже існує в теці призначення</string>
+ <string name="copy_file_error">Виникла помилка під час спроби скопіювати даний файл чи папку</string>
+ <string name="forbidden_permissions_copy">скопіювати даний файл</string>
<string name="prefs_category_instant_uploading">Миттєво завантаження</string>
<string name="prefs_category_security">Безпека</string>
<string name="prefs_instant_video_upload_path_title">Шлях завантаження відео</string>
- <string name="download_folder_failed_content">Скачування теки %1$s не може бути завершено</string>
+ <string name="shared_subject_header">поширений</string>
<string name="with_you_subject_header">з Вами</string>
- <string name="subject_token">%1$s поділився \"%2$s\" з вами</string>
+ <string name="subject_user_shared_with_you">%1$s поділився \"%2$s\" з вами</string>
+ <string name="subject_shared_with_you">З Вами поділилися \"%1$s\"</string>
<string name="auth_refresh_button">Оновити з\'єднання</string>
<string name="auth_host_address">Ареса серверу</string>
<string name="common_error_out_memory">Недостатньо пам\'яті</string>
<string name="file_list__footer__files">%1$d файлів</string>
<string name="file_list__footer__files_and_folder">%1$d файлів, 1 тека</string>
<string name="file_list__footer__files_and_folders">%1$d файлів, %2$d тек</string>
+ <string name="share_dialog_title">Спільний доступ</string>
+ <string name="share_via_link_section_title">Поділитись посиланням</string>
+ <string name="share_via_link_expiration_date_label">Встановити термін дії</string>
+ <string name="share_via_link_password_label">Захистити паролем</string>
+ <string name="share_search">Пошук</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">کھولیں</string>
<string name="prefs_category_more">مزید</string>
<string name="prefs_help">مدد</string>
<string name="auth_username">یوزر نیم</string>
<string name="setup_btn_connect">منسلک</string>
<string name="file_list_seconds_ago">سیکنڈز پہلے</string>
<string name="filedetails_download">ڈاؤن لوڈ،</string>
- <string name="action_share_file">اشتراک لنک</string>
+ <string name="action_share">اشتراک</string>
<string name="common_yes">ہاں</string>
<string name="common_no">نہیں</string>
<string name="common_ok">اوکے</string>
<string name="activity_chooser_send_file_title">بھجیں</string>
<string name="empty"></string>
<string name="folder_picker_choose_button_text">منتخب کریں</string>
+ <string name="share_via_link_section_title">اشتراک لنک</string>
+ <string name="share_via_link_expiration_date_label">تاریخ معیاد سیٹ کریں</string>
+ <string name="share_via_link_password_label">محفوظ پاسورڈ</string>
+ <string name="share_search">تلاش</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="Theme.ownCloud.ButtonStyle" parent="@android:style/Widget.Holo.Light.Button">
- <item name="android:background">@android:drawable/btn_default</item>
- <item name="android:textColor">@color/button_text_color</item>
- </style>
<!-- Notifications -->
- <!-- Notifications -->
<style name="Theme.ownCloud.NotificationText.Title"
parent="@android:style/TextAppearance.StatusBar.EventContent.Title" >
<item name="android:textSize">18sp</item>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="ProgressDialogTheme" parent="ownCloud.Dialog">
+ </style>
+ <style name="Theme.ownCloud.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+ </style>
+</resources>
\ No newline at end of file
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">Mở</string>
<string name="prefs_category_general">Tổng hợp</string>
<string name="prefs_category_more">hơn</string>
<string name="prefs_accounts">Tài khoản</string>
<string name="filedetails_created">Đã tạo:</string>
<string name="filedetails_modified">Đã chỉnh sửa:</string>
<string name="filedetails_download">Tải về</string>
- <string name="filedetails_sync_file">Cập nhật lại tập tin</string>
<string name="filedetails_renamed_in_upload_msg">Tập tin đã bị đổi tên thành %1$s trong quá trình tải lên</string>
- <string name="action_share_file">Chia sẻ liên kết</string>
- <string name="action_unshare_file">Liên kết không chia sẻ</string>
+ <string name="action_share">Chia sẻ</string>
<string name="common_yes">Yes</string>
<string name="common_no">Không</string>
<string name="common_ok">Chấp nhận</string>
- <string name="common_cancel_download">Hủy tải về</string>
- <string name="common_cancel_upload">Hủy upload</string>
<string name="common_cancel">Hủy</string>
<string name="common_save_exit">Lưu & Thoát</string>
<string name="common_error">Lỗi</string>
<string name="common_rename">Sửa tên</string>
<string name="common_remove">Xóa</string>
<string name="confirmation_remove_local">Chỉ cục bộ</string>
- <string name="confirmation_remove_folder_local">Chỉ nội dung trên máy</string>
- <string name="confirmation_remove_remote">Xóa từ máy chủ</string>
- <string name="confirmation_remove_remote_and_local">Remote và local</string>
+ <string name="confirmation_remove_folder_local">Chỉ cục bộ</string>
<string name="remove_success_msg">Xóa thành công</string>
<string name="remove_fail_msg">Xóa không thành công</string>
<string name="rename_dialog_title">Nhập tên mới</string>
<string name="prefs_category_accounts">Tài khoản</string>
<string name="folder_picker_choose_button_text">Chọn</string>
<string name="auth_host_address">Địa chỉ máy chủ</string>
+ <string name="share_dialog_title">Chia sẻ</string>
+ <string name="share_via_link_section_title">Chia sẻ liên kết</string>
+ <string name="share_via_link_expiration_date_label">Đặt ngày kết thúc</string>
+ <string name="share_via_link_password_label">Mật khẩu bảo vệ</string>
+ <string name="share_search">Tìm kiếm</string>
</resources>
<string name="drawer_item_settings">设置</string>
<string name="drawer_item_logs">日志</string>
<string name="drawer_close">关闭</string>
+ <string name="drawer_open">打开</string>
<string name="prefs_category_general">常规</string>
<string name="prefs_category_more">更多</string>
<string name="prefs_accounts">账号</string>
<string name="file_list_seconds_ago">几秒前</string>
<string name="file_list_empty">这里还什么都没有。上传些东西吧!</string>
<string name="file_list_loading">加载中...</string>
+ <string name="file_list_no_app_for_file_type">找不到用于打开此类型文件的应用</string>
<string name="local_file_list_empty">在该文件夹中不存在文件。</string>
<string name="filedetails_select_file">点击一个文件可以显示额外的信息。</string>
<string name="filedetails_size">大小:</string>
<string name="filedetails_created">创建于:</string>
<string name="filedetails_modified">修改于:</string>
<string name="filedetails_download">下载</string>
- <string name="filedetails_sync_file">刷新文件</string>
<string name="filedetails_renamed_in_upload_msg">上传过程中文件被更名为了 %1$s</string>
<string name="list_layout">列表布局</string>
- <string name="action_share_file">分享链接</string>
- <string name="action_unshare_file">取消分享链接</string>
+ <string name="action_share">共享</string>
<string name="common_yes">是</string>
<string name="common_no">否</string>
<string name="common_ok">确定</string>
- <string name="common_cancel_download">取消下载</string>
- <string name="common_cancel_upload">取消上传</string>
<string name="common_cancel">取消</string>
<string name="common_save_exit">保存并退出</string>
<string name="common_error">错误</string>
<string name="auth_can_not_auth_against_server">无法通过此服务器认证</string>
<string name="auth_account_does_not_exist">设备中还未存在该帐号</string>
<string name="favorite">收藏</string>
+ <string name="unfavorite">取消收藏</string>
<string name="common_rename">重命名</string>
<string name="common_remove">删除</string>
- <string name="confirmation_remove_alert">你确定要删除 %1$s 吗?</string>
+ <string name="confirmation_remove_file_alert">你确定要删除 %1$s 吗?</string>
<string name="confirmation_remove_folder_alert">您确定要删除 %1$s 及其内容吗?</string>
<string name="confirmation_remove_local">仅本地</string>
- <string name="confirmation_remove_folder_local">仅本地内容</string>
- <string name="confirmation_remove_remote">从服务器删除</string>
- <string name="confirmation_remove_remote_and_local">远程和本地都</string>
+ <string name="confirmation_remove_folder_local">仅本地</string>
+ <string name="confirmation_remove_file_remote">来自服务器</string>
+ <string name="confirmation_remove_remote_and_local">远程 & 本地</string>
<string name="remove_success_msg">成功删除</string>
<string name="remove_fail_msg">无法完成删除</string>
<string name="rename_dialog_title">请输出新的名字</string>
<string name="conflict_title">文件冲突</string>
<string name="conflict_message">您想要保留哪个文件?如果您同时选中了两个版本,本地的文件的文件名将被加上一个数字</string>
<string name="conflict_keep_both">保留两者</string>
- <string name="conflict_use_local_version">使用本地版本</string>
- <string name="conflict_use_server_version">使用服务器版本</string>
+ <string name="conflict_use_local_version">本地版本</string>
+ <string name="conflict_use_server_version">服务器版本</string>
<string name="preview_image_description">图片预览</string>
<string name="preview_image_error_unknown_format">无法显示图片</string>
<string name="error__upload__local_file_not_copied">无法复制 %1$s 到本地目录 %2$s</string>
<string name="downloader_download_file_not_found">该文件在服务器上不可用</string>
<string name="prefs_category_accounts">账号</string>
<string name="prefs_add_account">添加账号</string>
- <string name="auth_redirect_non_secure_connection_title">安全连接被重定向到非安全路径.</string>
+ <string name="auth_redirect_non_secure_connection_title">安全连接是通过一个非安全路由定向的。</string>
<string name="actionbar_logger">日志</string>
<string name="log_send_history_button">发送历史</string>
<string name="log_send_no_mail_app">未找到可以发送日志的程序。请安装 mail!</string>
<string name="move_file_invalid_overwrite">该文件已经存在在目标文件夹</string>
<string name="move_file_error">尝试移动该文件或文件夹时发生错误</string>
<string name="forbidden_permissions_move">移动该文件</string>
+ <string name="copy_file_not_found">无法复制文件。请检查文件是否存在</string>
+ <string name="copy_file_invalid_into_descendent">将一个目录移动到它的子目录是不可能的</string>
+ <string name="copy_file_invalid_overwrite">该文件已经存在在目标文件夹</string>
+ <string name="copy_file_error">尝试复制这个文件或文件夹时发生了错误</string>
+ <string name="forbidden_permissions_copy">复制这个文件</string>
<string name="prefs_category_instant_uploading">即时上传</string>
<string name="prefs_category_security">安全</string>
<string name="prefs_instant_video_upload_path_title">视频上传路径</string>
- <string name="download_folder_failed_content">%1$s 文件夹的下载无法完成</string>
<string name="shared_subject_header">已共享</string>
<string name="with_you_subject_header">与你</string>
+ <string name="subject_user_shared_with_you">%1$s和你分享了“%2$s”</string>
+ <string name="subject_shared_with_you">已与你分享“%1$s”</string>
<string name="auth_refresh_button">刷新连接</string>
<string name="auth_host_address">服务器地址</string>
<string name="common_error_out_memory">内存不足</string>
<string name="file_list__footer__files">%1$d 个文件</string>
<string name="file_list__footer__files_and_folder">%1$d 个文件,1 个文件夹</string>
<string name="file_list__footer__files_and_folders">%1$d 个文件,%2$d 个文件夹</string>
+ <string name="share_dialog_title">共享</string>
+ <string name="share_via_link_section_title">分享链接</string>
+ <string name="share_via_link_expiration_date_label">设置过期日期</string>
+ <string name="share_via_link_password_label">密码保护</string>
+ <string name="share_search">搜索</string>
</resources>
<!--<string name="drawer_item_accounts">Accounts</string>-->
<!--TODO re-enable when "On Device" is available
<string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_open">開啟</string>
<string name="prefs_category_general">一般</string>
<string name="prefs_category_more">更多</string>
<string name="prefs_accounts">帳號</string>
<string name="filedetails_created">建立時間:</string>
<string name="filedetails_modified">修改時間:</string>
<string name="filedetails_download">下載</string>
- <string name="action_share_file">分享連結</string>
- <string name="action_unshare_file">取消分享連結</string>
+ <string name="action_share">分享</string>
<string name="common_yes">是</string>
<string name="common_no">否</string>
<string name="common_ok">確定</string>
- <string name="common_cancel_download">取消下戴</string>
- <string name="common_cancel_upload">取消上戴</string>
<string name="common_cancel">取消</string>
<string name="common_save_exit">儲存並離開</string>
<string name="common_error">錯誤</string>
<string name="placeholder_filesize">389 KB</string>
<string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
<string name="placeholder_media_time">12:23:45</string>
- <string name="activity_chooser_send_file_title">傳送</string>
+ <string name="activity_chooser_send_file_title">發送</string>
<string name="copy_link">複製連結</string>
<string name="empty"></string>
<string name="prefs_category_accounts">帳號</string>
<string name="saml_authentication_wrong_pass">密碼錯誤</string>
<string name="prefs_category_security">安全</string>
<string name="auth_host_address">伺服器地址</string>
+ <string name="share_dialog_title">分享</string>
+ <string name="share_via_link_section_title">分享連結</string>
+ <string name="share_via_link_expiration_date_label">設定分享期限</string>
+ <string name="share_via_link_password_label">密碼保護</string>
+ <string name="share_search">尋找</string>
</resources>
<string name="drawer_item_settings">設定</string>
<string name="drawer_item_logs">紀錄</string>
<string name="drawer_close"> 關閉</string>
+ <string name="drawer_open">開啟</string>
<string name="prefs_category_general">一般</string>
<string name="prefs_category_more">更多</string>
<string name="prefs_accounts">帳號</string>
<string name="prefs_manage_accounts">管理帳號</string>
+ <string name="prefs_passcode">密碼鎖</string>
<string name="prefs_instant_upload">即時圖片上傳</string>
<string name="prefs_instant_upload_summary">即時上傳相機照片</string>
<string name="prefs_instant_video_upload">即時影像上傳</string>
<string name="uploader_info_uploading">上傳中</string>
<string name="file_list_seconds_ago">幾秒前</string>
<string name="file_list_empty">這裡還沒有東西,上傳一些吧!</string>
+ <string name="file_list_loading">載入中…</string>
<string name="local_file_list_empty">這個目錄中沒有任何檔案.</string>
<string name="filedetails_select_file">在檔案上輕觸來顯示更多資訊。</string>
<string name="filedetails_size">容量:</string>
<string name="filedetails_created">建立:</string>
<string name="filedetails_modified">修改:</string>
<string name="filedetails_download">下載</string>
- <string name="filedetails_sync_file">更新檔案列表</string>
<string name="filedetails_renamed_in_upload_msg">檔案名稱在上傳時已被更改為 %1$s</string>
- <string name="action_share_file">分享連結</string>
- <string name="action_unshare_file">取消共享連結</string>
+ <string name="list_layout">列表版型</string>
+ <string name="action_share">分享</string>
<string name="common_yes">是</string>
<string name="common_no">否</string>
<string name="common_ok">好</string>
- <string name="common_cancel_download">取消下載</string>
- <string name="common_cancel_upload">取消上傳</string>
<string name="common_cancel">取消</string>
<string name="common_save_exit">儲存並離開</string>
<string name="common_error">錯誤</string>
<string name="foreign_files_local_text">本地: %1$s</string>
<string name="foreign_files_remote_text">遠端: %1$s</string>
<string name="upload_query_move_foreign_files">無足夠的空間可以複製檔案到 %1$s 目錄. 是否使用移動的方式來處理? </string>
+ <string name="pass_code_enter_pass_code">請輸入您的密碼鎖密碼</string>
+ <string name="pass_code_configure_your_pass_code">輸入您的密碼鎖密碼</string>
+ <string name="pass_code_configure_your_pass_code_explanation">這個密碼在你每次啟動這程式時都會被要求輸入</string>
+ <string name="pass_code_reenter_your_pass_code">請重新輸入您的密碼鎖密碼</string>
+ <string name="pass_code_remove_your_pass_code">移除您的密碼鎖密碼</string>
+ <string name="pass_code_mismatch">密碼不相符</string>
+ <string name="pass_code_wrong">不正確的密碼</string>
+ <string name="pass_code_removed">密碼鎖已被移除</string>
+ <string name="pass_code_stored">密碼鎖已設定</string>
<string name="media_notif_ticker">%1$s 音樂播放器</string>
<string name="media_state_playing">%1$s (播放中)</string>
<string name="media_state_loading">%1$s (載入中)</string>
<string name="auth_can_not_auth_against_server">無法在這個伺服器上取得認證</string>
<string name="auth_account_does_not_exist">帳號目前不存在於本裝置</string>
<string name="favorite">我的最愛</string>
+ <string name="unfavorite">不喜愛的</string>
<string name="common_rename">重新命名</string>
<string name="common_remove">移除</string>
- <string name="confirmation_remove_alert">您真的要移除 %1$s ?</string>
+ <string name="confirmation_remove_file_alert">您真的要移除 %1$s ?</string>
<string name="confirmation_remove_folder_alert">您真的要移除 %1$s 與裡頭的檔案?</string>
<string name="confirmation_remove_local">只有本地</string>
<string name="confirmation_remove_folder_local">只有本地</string>
- <string name="confirmation_remove_remote">從伺服器移除</string>
- <string name="confirmation_remove_remote_and_local">遠端與本地</string>
+ <string name="confirmation_remove_file_remote">來自伺服器</string>
+ <string name="confirmation_remove_remote_and_local">遠端 & 本地</string>
<string name="remove_success_msg">成功地移除</string>
<string name="remove_fail_msg">刪除失敗</string>
<string name="rename_dialog_title">輸入新名稱</string>
<string name="sync_file_nothing_to_do_msg">檔案與同步</string>
<string name="create_dir_fail_msg">資料夾無法建立</string>
<string name="filename_forbidden_characters">禁止使用字符: / \\ < > : \" | ? *</string>
+ <string name="filename_forbidden_charaters_from_server">檔案名稱含有不合法的字元</string>
<string name="filename_empty">檔名不能為空的</string>
<string name="wait_a_moment">請稍後</string>
<string name="filedisplay_unexpected_bad_get_content">未知的問題; 請選擇其他程式開啟檔案</string>
<string name="filedisplay_no_file_selected">沒有挑選檔案</string>
<string name="activity_chooser_title">傳送連結至 ...</string>
+ <string name="wait_for_tmp_copy_from_private_storage">由私有的儲存空間複製檔案中</string>
<string name="oauth_check_onoff">以 oAuth2 方式登入</string>
<string name="oauth_login_connection">連線到 oAuth2 伺服器…</string>
<string name="ssl_validator_header">這個網站的憑證無法被驗證</string>
<string name="instant_upload_on_wifi">只使用 WiFi 來執行即時圖片上傳的功能</string>
<string name="instant_video_upload_on_wifi">只使用 WiFi 來執行即時影像上傳的功能</string>
<string name="instant_upload_path">/InstantUpload</string>
+ <string name="conflict_title">檔案衝突</string>
+ <string name="conflict_message">您要保留那個檔案? 如果您同時選擇兩個版本, 本地的檔案將在檔案名稱後面會加上編號</string>
<string name="conflict_keep_both">都保留</string>
+ <string name="conflict_use_local_version">本地版本</string>
+ <string name="conflict_use_server_version">伺服器版本</string>
<string name="preview_image_description">圖片預覽</string>
<string name="preview_image_error_unknown_format">無法顯示圖片</string>
<string name="error__upload__local_file_not_copied">%1$s 無法被複製到本地目錄 %2$s</string>
<string name="downloader_download_file_not_found">這個檔案已經不存在於伺服器中</string>
<string name="prefs_category_accounts">帳號</string>
<string name="prefs_add_account">新增帳號</string>
- <string name="auth_redirect_non_secure_connection_title">安全連線被轉向到一個非安全的連線</string>
<string name="actionbar_logger">紀錄</string>
<string name="log_send_history_button">傳送歷史記錄</string>
<string name="log_send_no_mail_app">找不到可以傳送記錄的電子郵件程式. 請安裝電子郵件軟體!</string>
<string name="move_file_invalid_overwrite">這個檔案已經存在於目的目錄中</string>
<string name="move_file_error">在移動檔案或目錄時發生了錯誤</string>
<string name="forbidden_permissions_move">移動這個檔案</string>
+ <string name="copy_file_invalid_overwrite">這個檔案已經存在於目的目錄中</string>
<string name="prefs_category_instant_uploading">即時上傳</string>
<string name="prefs_category_security">安全性</string>
<string name="prefs_instant_video_upload_path_title">影片上傳路徑</string>
- <string name="download_folder_failed_content">%1$s 目錄的下載未完成</string>
<string name="shared_subject_header">以分享的</string>
<string name="with_you_subject_header">與你</string>
- <string name="subject_token">%1$s 分享了 \"%2$s\" 給您</string>
+ <string name="subject_user_shared_with_you">%1$s 分享了 \"%2$s\" 給您</string>
+ <string name="subject_shared_with_you">\"%1$s\" 已經與您分享</string>
<string name="auth_refresh_button">重新連線</string>
<string name="auth_host_address">伺服器位址</string>
+ <string name="common_error_out_memory">記憶體不足</string>
<string name="username">使用者名稱</string>
+ <string name="file_list__footer__folder">1 個資料夾</string>
+ <string name="file_list__footer__folders">%1$d 個資料夾</string>
+ <string name="file_list__footer__file">1 個檔案</string>
+ <string name="file_list__footer__file_and_folder">1 個檔案, 1 個資料夾</string>
+ <string name="file_list__footer__file_and_folders">1 個檔案, %1$d 個資料夾</string>
+ <string name="file_list__footer__files">%1$d 個檔案</string>
+ <string name="file_list__footer__files_and_folder">%1$d 個檔案, 1 個資料夾</string>
+ <string name="file_list__footer__files_and_folders">%1$d 個檔案, %2$d 個資料夾</string>
+ <string name="share_dialog_title">分享</string>
+ <string name="share_no_users">目前沒有任何您分享的內容</string>
+ <string name="share_add_user_or_group">新增使用者或是群組</string>
+ <string name="share_via_link_section_title">分享連結</string>
+ <string name="share_via_link_expiration_date_label">指定到期日</string>
+ <string name="share_via_link_password_label">密碼保護</string>
+ <string name="share_search">搜尋</string>
</resources>
<attr name="optionOneString" format="string" />
<attr name="optionOneColor" format="color" />
- <attr name="optionTwoString" format="string" />
+ <attr name="optionTwoString" format="string" />
<attr name="optionTwoColor" format="color" />
<attr name="onBadgeClick" format="string" />
</declare-styleable>
+ <string-array name="pref_behaviour_entries">
+ <item>@string/pref_behaviour_entries_keep_file</item>
+ <item>@string/pref_behaviour_entries_move</item>
+ </string-array>
+
+ <string-array name="pref_behaviour_entryValues">
+ <item>NOTHING</item>
+ <item>MOVE</item>
+ </string-array>
</resources>
\ No newline at end of file
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
-
- <color name="filelist_icon_backgorund">#DDDDDD</color>
+
+ <color name="owncloud_blue">@color/actionbar_start_color</color>
+ <color name="owncloud_blue_accent">#35537A</color>
<color name="owncloud_blue_bright">#00ddff</color>
- <color name="list_item_lastmod_and_filesize_text">#989898</color>
+
+ <color name="list_item_lastmod_and_filesize_text">@color/secondaryTextColor</color>
<color name="black">#000000</color>
- <color name="textColor">#303030</color>
- <color name="list_divider_background">#fff0f0f0</color>
-
+ <color name="white">#FFFFFF</color>
+ <color name="fab_white">#fafafa</color>
+ <color name="white_pressed">#f1f1f1</color>
+ <color name="half_black">#808080</color>
+ <color name="black_semi_transparent">#B2000000</color>
+ <color name="textColor">@color/black</color>
+ <color name="drawerMenuTextColor">#000000</color>
+ <color name="list_divider_background">#eee</color>
+ <color name="filelist_icon_backgorund">#DDDDDD</color>
+ <color name="dark_background_text_color">#EEEEEE</color>
+ <color name="login_text_color">#757575</color>
+ <color name="login_text_hint_color">#757575</color>
+ <color name="primary_button_color">@color/owncloud_blue_accent</color>
+ <color name="secondary_button_color">#D6D7D7</color>
+ <color name="transparent">#00000000</color>
+ <color name="secondaryTextColor">#a0a0a0</color>
+ <color name="listItemHighlighted">#f8f8f8</color>
+ <color name="highlightTextColor">#55739a</color>
+
+ <!-- Colors -->
+ <color name="color_accent">@color/owncloud_blue_accent</color>
+ <color name="dialog_list_item">#1F1F1F</color>
+
+ <!-- standard material color definitions -->
+ <color name="primary">@color/owncloud_blue</color>
+ <color name="primary_dark">#162233</color>
+
+ <!-- special transparent action bar colors for image preview -->
+ <color name="owncloud_blue_transparent">#201D2D44</color>
+ <color name="owncloud_blue_dark_transparent">#40162233</color>
</resources>
\ No newline at end of file
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
- <dimen name="file_icon_size">32dp</dimen>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">@dimen/standard_padding</dimen>
+ <dimen name="activity_vertical_margin">@dimen/standard_padding</dimen>
+ <dimen name="nav_drawer_width">260dp</dimen>
+
+ <dimen name="file_icon_size">32dp</dimen>
<dimen name="file_icon_size_grid">128dp</dimen>
+ <dimen name="standard_padding">16dp</dimen>
+ <dimen name="standard_margin">16dp</dimen>
+
+ <dimen name="two_line_primary_text_size">16sp</dimen>
+ <dimen name="two_line_secondary_text_size">14sp</dimen>
</resources>
<!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<item>@string/prefs_accounts</item>-->
<item>@string/drawer_item_all_files</item>
- <!--<item>@string/drawer_item_on_device</item>-->
+ <item>@string/drawer_item_on_device</item>
<item>@string/actionbar_settings</item>
<item>@string/actionbar_logger</item>
</string-array>
<!-- TODO re-enable when "Accounts" is available in Navigation Drawer-->
<!--<item>@string/drawer_item_accounts</item>-->
<item>@string/drawer_item_all_files</item>
- <!--<item>@string/drawer_item_on_device</item>-->
+ <item>@string/drawer_item_on_device</item>
<item>@string/drawer_item_settings</item>
<item>@string/drawer_item_logs</item>
</string-array>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- App name and other strings-->
- <string name="app_name">ownCloud</string>
- <string name="account_type">owncloud</string> <!-- better if was a domain name; but changing it now would require migrate accounts when the app is updated -->
- <string name="authority">org.owncloud</string> <!-- better if was the app package with ".provider" appended ; it identifies the provider -->
+ <string name="app_name">ownCloud beta</string>
+ <string name="account_type">owncloud.beta</string> <!-- better if was a domain name; but changing it now would require migrate accounts when the app is updated -->
+ <string name="authority">org.owncloud.beta.provider</string> <!-- better if was the app package with ".provider" appended ; it identifies the provider -->
+ <string name="authorityCache">org.owncloud.beta.imageCache.provider</string>
<string name ="db_file">owncloud.db</string>
<string name ="db_name">ownCloud</string>
- <string name ="data_folder">owncloud</string>
+ <string name ="data_folder">owncloud-beta</string>
<string name ="log_name">Owncloud_</string>
- <string name ="default_display_name_for_root_folder">ownCloud</string>
+ <string name ="default_display_name_for_root_folder">ownCloud beta</string>
<string name ="user_agent">Mozilla/5.0 (Android) ownCloud-android/%1$s</string>
<!-- URLs and flags related -->
<!-- Colors -->
<color name="login_background_color">#FFFFFF</color>
<color name="login_logo_background_color">#FFFFFF</color>
- <color name="background_color">#F7F7F7</color>
+ <color name="background_color">#FFFFFF</color>
<color name="actionbar_start_color">#1D2D44</color>
<color name="actionbar_end_color">#1D2D44</color>
<bool name="recommend_enabled">true</bool>
<bool name="feedback_enabled">true</bool>
<string name="url_help">http://owncloud.com/mobile/help</string>
+ <string name="beta_link">https://github.com/owncloud/android/raw/beta/apks/owncloud-beta-</string>
<string name="url_imprint"></string>
<string name="mail_recommend">"mailto:"</string>
<string name="mail_feedback">"mailto:apps@owncloud.com"</string>
<!-- TODO re-enable when "Accounts" is available in Navigation Drawer -->
<!--<string name="drawer_item_accounts">Accounts</string>-->
<string name="drawer_item_all_files">All files</string>
- <!-- TODO re-enable when "On Device" is available
- <string name="drawer_item_on_device">On device</string>-->
+ <string name="drawer_item_on_device">On device</string>
<string name="drawer_item_settings">Settings</string>
<string name="drawer_item_logs">Logs</string>
<string name="drawer_close">Close</string>
+ <string name="drawer_open">Open</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">More</string>
<string name="prefs_accounts">Accounts</string>
<string name="setup_btn_connect">Connect</string>
<string name="uploader_btn_upload_text">Upload</string>
<string name="uploader_btn_new_folder_text">New folder</string>
- <string name="uploader_top_message">Choose upload folder:</string>
+ <string name="uploader_top_message">Choose upload folder</string>
<string name="uploader_wrn_no_account_title">No account found</string>
<string name="uploader_wrn_no_account_text">There are no %1$s accounts on your device. Please setup an account first.</string>
<string name="uploader_wrn_no_account_setup_btn_text">Setup</string>
<string name="file_list_seconds_ago">seconds ago</string>
<string name="file_list_empty">Nothing in here. Upload something!</string>
<string name="file_list_loading">Loading…</string>
+ <string name="file_list_no_app_for_file_type">No App found for file type!</string>
<string name="local_file_list_empty">There are no files in this folder.</string>
<string name="filedetails_select_file">Tap on a file to display additional information.</string>
<string name="filedetails_size">Size:</string>
<string name="filedetails_created">Created:</string>
<string name="filedetails_modified">Modified:</string>
<string name="filedetails_download">Download</string>
- <string name="filedetails_sync_file">Refresh file</string>
+ <string name="filedetails_sync_file">Synchronize</string>
<string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
<string name="list_layout">List Layout</string>
- <string name="action_share_file">Share link</string>
- <string name="action_unshare_file">Unshare link</string>
+ <string name="action_share">Share</string>
<string name="common_yes">Yes</string>
<string name="common_no">No</string>
<string name="common_ok">OK</string>
- <string name="common_cancel_download">Cancel download</string>
- <string name="common_cancel_upload">Cancel upload</string>
+ <string name="common_cancel_sync">Cancel synchronization</string>
<string name="common_cancel">Cancel</string>
<string name="common_save_exit">Save & Exit</string>
<string name="common_error">Error</string>
<string name="sync_fail_ticker_unauthorized">Synchronization failed, you need to relogin</string>
<string name="sync_fail_content">Synchronization of %1$s could not be completed</string>
<string name="sync_fail_content_unauthorized">Invalid password for %1$s</string>
- <string name="sync_conflicts_in_favourites_ticker">Conflicts found</string>
- <string name="sync_conflicts_in_favourites_content">%1$d kept-in-sync files could not be sync\'ed</string>
+ <string name="sync_conflicts_in_favourites_ticker">Conflicts found</string>
+ <string name="sync_conflicts_in_favourites_content">%1$d kept-in-sync files could not be sync\'ed</string>
<string name="sync_fail_in_favourites_ticker">Kept-in-sync files failed</string>
<string name="sync_fail_in_favourites_content">Contents of %1$d files could not be sync\'ed (%2$d conflicts)</string>
<string name="sync_foreign_files_forgotten_ticker">Some local files were forgotten</string>
<string name="sync_foreign_files_forgotten_content">%1$d files out of the %2$s folder could not be copied into</string>
<string name="sync_foreign_files_forgotten_explanation">As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s folder and retain the link to %4$s.\n\nListed below are the local file(s), and the remote file(s) in %5$s they were linked to.</string>
- <string name="sync_current_folder_was_removed">Folder %1$s does not exist anymore</string>
+ <string name="sync_current_folder_was_removed">Folder %1$s does not exist anymore</string>
<string name="foreign_files_move">"Move all"</string>
<string name="foreign_files_success">"All files were moved"</string>
<string name="foreign_files_fail">"Some files could not be moved"</string>
<string name="media_state_loading">"%1$s (loading)"</string>
<string name="media_event_done">"%1$s playback finished"</string>
<string name="media_err_nothing_to_play">No media file found</string>
- <string name="media_err_no_account">No account provided</string>
- <string name="media_err_not_in_owncloud">File not in a valid account</string>
- <string name="media_err_unsupported">Unsupported media codec</string>
- <string name="media_err_io">Media file could not be read</string>
- <string name="media_err_malformed">Media file not correctly encoded</string>
- <string name="media_err_timeout">Timed out while trying to play</string>
- <string name="media_err_invalid_progressive_playback">Media file cannot be streamed</string>
- <string name="media_err_unknown">Media file cannot be played with the stock media player</string>
- <string name="media_err_security_ex">Security error trying to play %1$s</string>
- <string name="media_err_io_ex">Input error trying to play %1$s</string>
- <string name="media_err_unexpected">Unexpected error trying to play %1$s</string>
- <string name="media_rewind_description">Rewind button</string>
- <string name="media_play_pause_description">Play or pause button</string>
- <string name="media_forward_description">Fast forward button</string>
+ <string name="media_err_no_account">No account provided</string>
+ <string name="media_err_not_in_owncloud">File not in a valid account</string>
+ <string name="media_err_unsupported">Unsupported media codec</string>
+ <string name="media_err_io">Media file could not be read</string>
+ <string name="media_err_malformed">Media file not correctly encoded</string>
+ <string name="media_err_timeout">Timed out while trying to play</string>
+ <string name="media_err_invalid_progressive_playback">Media file cannot be streamed</string>
+ <string name="media_err_unknown">Media file cannot be played with the stock media player</string>
+ <string name="media_err_security_ex">Security error trying to play %1$s</string>
+ <string name="media_err_io_ex">Input error trying to play %1$s</string>
+ <string name="media_err_unexpected">Unexpected error trying to play %1$s</string>
+ <string name="media_rewind_description">Rewind button</string>
+ <string name="media_play_pause_description">Play or pause button</string>
+ <string name="media_forward_description">Fast forward button</string>
<string name="auth_getting_authorization">Getting authorization…</string>
<string name="auth_trying_to_login">Trying to login…</string>
<string name="unfavorite">Unfavorite</string>
<string name="common_rename">Rename</string>
<string name="common_remove">Remove</string>
- <string name="confirmation_remove_alert">"Do you really want to remove %1$s?"</string>
+ <string name="confirmation_remove_file_alert">"Do you really want to remove %1$s?"</string>
<string name="confirmation_remove_folder_alert">"Do you really want to remove %1$s and its contents?"</string>
<string name="confirmation_remove_local">Local only</string>
- <string name="confirmation_remove_folder_local">Local contents only</string>
- <string name="confirmation_remove_remote">Remove from server</string>
- <string name="confirmation_remove_remote_and_local">Remote and local</string>
+ <string name="confirmation_remove_folder_local">Local only</string>
+ <string name="confirmation_remove_file_remote">From server</string>
+ <string name="confirmation_remove_remote_and_local">Remote & local</string>
<string name="remove_success_msg">"Removal succeeded"</string>
<string name="remove_fail_msg">"Removal failed"</string>
<string name="rename_dialog_title">Enter a new name</string>
<string name="ssl_validator_label_L">Location:</string>
<string name="ssl_validator_label_validity">Validity:</string>
<string name="ssl_validator_label_validity_from">From:</string>
- <string name="ssl_validator_label_validity_to">To:</string>
- <string name="ssl_validator_label_signature">Signature:</string>
- <string name="ssl_validator_label_signature_algorithm">Algorithm:</string>
- <string name="ssl_validator_null_cert">The certificate could not be shown.</string>
- <string name="ssl_validator_no_info_about_error">- No information about the error</string>
-
+ <string name="ssl_validator_label_validity_to">To:</string>
+ <string name="ssl_validator_label_signature">Signature:</string>
+ <string name="ssl_validator_label_signature_algorithm">Algorithm:</string>
+ <string name="digest_algorithm_not_available">This digest algorithm is not available on your phone.</string>
+ <string name="ssl_validator_label_certificate_fingerprint">Fingerprint:</string>
+ <string name="certificate_load_problem">There is a problem loading the certificate.</string>
+ <string name="ssl_validator_null_cert">The certificate could not be shown.</string>
+ <string name="ssl_validator_no_info_about_error">- No information about the error</string>
+
<string name="placeholder_sentence">This is a placeholder</string>
<string name="placeholder_filename">placeholder.txt</string>
<string name="placeholder_filetype">PNG Image</string>
<string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
<string name="placeholder_media_time">12:23:45</string>
- <string name="instant_upload_on_wifi">Upload pictures via WiFi only</string>
- <string name="instant_video_upload_on_wifi">Upload videos via WiFi only</string>
+ <string name="instant_upload_on_wifi">Upload pictures via wifi only</string>
+ <string name="instant_upload_on_charging">Upload when charging only</string>
+ <string name="instant_video_upload_on_wifi">Upload videos via wifi only</string>
+ <string name="instant_video_upload_on_charging">Upload when charging only</string>
<string name="instant_upload_path">/InstantUpload</string>
<string name="conflict_title">File conflict</string>
<string name="conflict_message">Which files do you want to keep? If you select both versions, the local file will have a number added to its name.</string>
<string name="conflict_keep_both">Keep both</string>
- <string name="conflict_use_local_version">Use local version</string>
- <string name="conflict_use_server_version">Use server version</string>
+ <string name="conflict_use_local_version">local version</string>
+ <string name="conflict_use_server_version">server version</string>
<string name="preview_image_description">Image preview</string>
<string name="preview_image_error_unknown_format">This image cannot be shown</string>
-
+
<string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
- <string name="prefs_instant_upload_path_title">Upload Path</string>
+ <string name="prefs_instant_upload_path_title">Upload path</string>
<string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your
administrator.</string>
<string name="share_link_file_error">An error occurred while trying to share this file or folder</string>
<string name="unshare_link_file_no_exist">Unable to unshare. Please check whether the file exists</string>
<string name="unshare_link_file_error">An error occurred while trying to unshare this file or folder</string>
+ <string name="update_link_file_no_exist">Unable to update. Please check whether the file exists </string>
+ <string name="update_link_file_error">An error occurred while trying to update the shared link</string>
<string name="share_link_password_title">Enter a password</string>
<string name="share_link_empty_password">You must enter a password</string>
- <string name="activity_chooser_send_file_title">Send</string>
+ <string name="activity_chooser_send_file_title">Send</string>
- <string name="copy_link">Copy link</string>
- <string name="clipboard_text_copied">Copied to clipboard</string>
+ <string name="copy_link">Copy link</string>
+ <string name="clipboard_text_copied">Copied to clipboard</string>
- <string name="error_cant_bind_to_operations_service">Critical error: cannot perform operations</string>
-
- <string name="network_error_socket_exception">An error occurred while connecting with the server.</string>
- <string name="network_error_socket_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
- <string name="network_error_connect_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
- <string name="network_host_not_available">The operation couldn\'t be completed, server is unavailable</string>
+ <string name="error_cant_bind_to_operations_service">Critical error: cannot perform operations</string>
- <string name="empty" />
-
- <string name="forbidden_permissions">You do not have permission %s</string>
- <string name="forbidden_permissions_rename">to rename this file</string>
- <string name="forbidden_permissions_delete">to delete this file</string>
- <string name="share_link_forbidden_permissions">to share this file</string>
- <string name="unshare_link_forbidden_permissions">to unshare this file</string>
- <string name="forbidden_permissions_create">to create the file</string>
- <string name="uploader_upload_forbidden_permissions">to upload in this folder</string>
- <string name="downloader_download_file_not_found">The file is no longer available on the server</string>
+ <string name="network_error_socket_exception">An error occurred while connecting with the server.</string>
+ <string name="network_error_socket_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
+ <string name="network_error_connect_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
+ <string name="network_host_not_available">The operation couldn\'t be completed, server is unavailable</string>
+ <string name="empty" />
- <string name="prefs_category_accounts">Accounts</string>
- <string name="prefs_add_account">Add account</string>
- <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected to an unsecured route.</string>
+ <string name="forbidden_permissions">You do not have permission %s</string>
+ <string name="forbidden_permissions_rename">to rename this file</string>
+ <string name="forbidden_permissions_delete">to delete this file</string>
+ <string name="share_link_forbidden_permissions">to share this file</string>
+ <string name="unshare_link_forbidden_permissions">to unshare this file</string>
+ <string name="update_link_forbidden_permissions">to update this shared link</string>
+ <string name="forbidden_permissions_create">to create the file</string>
+ <string name="uploader_upload_forbidden_permissions">to upload in this folder</string>
+ <string name="downloader_download_file_not_found">The file is no longer available on the server</string>
+
+ <string name="file_migration_finish_button">Finish</string>
+ <string name="file_migration_preparing">Preparing for migration...</string>
+ <string name="file_migration_checking_destination">Checking destination...</string>
+ <string name="file_migration_saving_accounts_configuration">Saving accounts configuration...</string>
+ <string name="file_migration_waiting_for_unfinished_sync">Waiting for unfinished synchronizations...</string>
+ <string name="file_migration_migrating">Moving data...</string>
+ <string name="file_migration_updating_index">Updating index...</string>
+ <string name="file_migration_cleaning">Cleaning...</string>
+ <string name="file_migration_restoring_accounts_configuration">Restoring accounts configuration...</string>
+ <string name="file_migration_ok_finished">Finished</string>
+ <string name="file_migration_failed_not_enough_space">ERROR: Not enough space</string>
+ <string name="file_migration_failed_not_writable">ERROR: File is not writable</string>
+ <string name="file_migration_failed_not_readable">ERROR: File is not readable</string>
+ <string name="file_migration_failed_dir_already_exists">ERROR: owncloud directory already exists</string>
+ <string name="file_migration_failed_while_coping">ERROR: While migrating</string>
+ <string name="file_migration_failed_while_updating_index">ERROR: While updating index</string>
+
+ <string name="prefs_category_accounts">Accounts</string>
+ <string name="prefs_add_account">Add account</string>
+ <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
<string name="actionbar_logger">Logs</string>
<string name="log_send_history_button">Send History</string>
<string name="file_list_empty_moving">Nothing in here. You can add a folder!</string>
<string name="folder_picker_choose_button_text">Choose</string>
- <string name="move_file_not_found">Unable to move. Please check whether the file exists</string>
- <string name="move_file_invalid_into_descendent">It is not possible to move a folder into a descendant</string>
- <string name="move_file_invalid_overwrite">The file exists already in the destination folder</string>
- <string name="move_file_error">An error occurred while trying to move this file or folder</string>
- <string name="forbidden_permissions_move">to move this file</string>
+ <string name="move_file_not_found">Unable to move. Please check whether the file exists</string>
+ <string name="move_file_invalid_into_descendent">It is not possible to move a folder into a descendant</string>
+ <string name="move_file_invalid_overwrite">The file exists already in the destination folder</string>
+ <string name="move_file_error">An error occurred while trying to move this file or folder</string>
+ <string name="forbidden_permissions_move">to move this file</string>
+
- <string name="prefs_category_instant_uploading">Instant Uploads</string>
+ <string name="copy_file_not_found">Unable to copy. Please check whether the file exists</string>
+ <string name="copy_file_invalid_into_descendent">It is not possible to copy a folder into a descendant</string>
+ <string name="copy_file_invalid_overwrite">The file exists already in the destination folder</string>
+ <string name="copy_file_error">An error occurred while trying to copy this file or folder</string>
+ <string name="forbidden_permissions_copy">to copy this file</string>
+
+ <string name="prefs_category_instant_uploading">Instant Uploads</string>
<string name="prefs_category_security">Security</string>
- <string name="prefs_instant_video_upload_path_title">Upload Video Path</string>
+ <string name="prefs_instant_video_upload_path_title">Upload video path</string>
<string name="download_folder_failed_content">Download of %1$s folder could not be completed</string>
+ <string name="sync_folder_failed_content">Synchronization of %1$s folder could not be completed</string>
<string name="shared_subject_header">shared</string>
<string name="with_you_subject_header">with you</string>
- <string name="subject_token">%1$s shared \"%2$s\" with you</string>
- <string name="saml_subject_token">\"%1$s\" has been shared with you</string>
+ <string name="subject_user_shared_with_you">%1$s shared \"%2$s\" with you</string>
+ <string name="subject_shared_with_you">\"%1$s\" has been shared with you</string>
<string name="auth_refresh_button">Refresh connection</string>
<string name="auth_host_address">Server address</string>
<string name="file_list__footer__files">%1$d files</string>
<string name="file_list__footer__files_and_folder">%1$d files, 1 folder</string>
<string name="file_list__footer__files_and_folders">%1$d files, %2$d folders</string>
+ <string name="action_switch_grid_view">Switch to grid view</string>
+ <string name="action_switch_list_view">Switch to list view</string>
+ <string name="common_category">Common</string>
+ <string name="pref_cache_size">Cache size</string>
+ <string name="prefs_instant_behaviour_dialogTitle">Upload file to server and ...</string>
+ <string name="prefs_instant_behaviour_title">Behaviour</string>
+ <string name="prefs_instant_behaviour_dialogTitle">Original file will be...</string>
+ <string name="prefs_instant_behaviour_title">Original file will be...</string>
+ <string name="upload_copy_files">Copy file</string>
+ <string name="upload_move_files">Move file</string>
+ <string name="prefs_storage_path">Storage path</string>
+ <string name="prefs_common">Common</string>
+
+ <string name="pref_behaviour_entries_do_nothing">do nothing</string>
+ <string name="pref_behaviour_entries_copy">copy file to OC folder</string>
+ <string name="pref_behaviour_entries_move">move file to OC folder</string>
+ <string name="pref_behaviour_entries_delete">delete origin file</string>
+ <string name="confirmation_remove_files_alert">Do you really want to remove selected items?</string>
+ <string name="confirmation_remove_folders_alert">Do you really want to remove a folder and its content?</string>
+ <string name="confirmation_remove_files">selected items</string>
+ <string name="error_log_exit">Exit</string>
+ <string name="error_log_send">Send Log</string>
+ <string name="error_log_title">Error Log</string>
+ <string name="action_stream_file">Stream file with external player</string>
+ <string name="stream_expose_password">Do you want to stream this file with an external app?\n\nCAUTION: This may expose your password!</string>
+ <string name="set_picture_as">Set picture as</string>
+ <string name="set_as">Set As</string>
+ <string name="pref_behaviour_entries_keep_file">kept in original folder</string>
+ <string name="pref_behaviour_entries_move">moved to ownCloud folder</string>
+
+ <string name="share_dialog_title">Sharing</string>
+ <string name="share_with_user_section_title">Share with users and groups</string>
+ <string name="share_no_users">No data shared with users yet</string>
+ <string name="share_add_user_or_group">Add User or Group</string>
+ <string name="share_via_link_section_title">Share link</string>
+ <string name="share_via_link_expiration_date_label">Set expiration date</string>
+ <string name="share_via_link_password_label">Password protect</string>
+ <string name="share_via_link_password_title">Secured</string>
+ <string name="share_get_public_link_button">Get link</string>
+
+ <string name="share_search">Search</string>
+
+ <string name="search_users_and_groups_hint">Search users and groups</string>
+ <string name="share_group_clarification">%1$s (group)</string>
+
+ <string name="share_sharee_unavailable">Sorry, your server version does not allow share with users within clients.
+ \nPlease contact your administrator</string>
+ <string name="changelog">https://github.com/owncloud/android/raw/beta/CHANGELOG.md</string>
</resources>
<style name="Animations" />
<!-- General ownCloud app style -->
- <style name="Theme.ownCloud" parent="style/Theme.AppCompat.Light.DarkActionBar">
+ <style name="Theme.ownCloud" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
<item name="actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
- <item name="android:buttonStyle">@style/Theme.ownCloud.ButtonStyle</item>
+ <item name="colorPrimary">@color/primary</item>
+ <item name="colorPrimaryDark">@color/primary_dark</item>
+ <item name="colorAccent">@color/color_accent</item>
+ <item name="android:alertDialogTheme">@style/Theme.ownCloud.Dialog</item>
+ <item name="alertDialogTheme">@style/ownCloud.AlertDialog</item>
</style>
-
- <style name="Theme.ownCloud.noActionBar" parent="style/Theme.AppCompat.Light">
- <item name="android:buttonStyle">@style/Theme.ownCloud.ButtonStyle</item>
+
+ <!-- seperate action bar style for activities without an action bar -->
+ <style name="Theme.ownCloud.noActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
+ <item name="windowNoTitle">true</item>
+ <item name="windowActionBar">false</item>
+ <item name="colorPrimary">@color/primary</item>
+ <item name="colorPrimaryDark">@color/primary_dark</item>
+ <item name="colorAccent">@color/color_accent</item>
+ <item name="android:alertDialogTheme">@style/Theme.ownCloud.Dialog</item>
+ <item name="alertDialogTheme">@style/ownCloud.AlertDialog</item>
</style>
+ <style name="Theme.ownCloud.noActionBar.Login" parent="Theme.ownCloud.noActionBar">
+ <item name="colorAccent">@color/white</item>
+ </style>
+
+ <style name="ownCloud.AlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
+ <item name="colorAccent">@color/color_accent</item>
+ <item name="android:textColorPrimary">@color/primary</item>
+ </style>
+
+ <style name="ownCloud.Dialog" parent="Theme.AppCompat.Light.Dialog">
+ <item name="colorAccent">@color/color_accent</item>
+ </style>
+
+ <style name="ProgressDialogTheme" parent="ownCloud.Dialog">
+ <item name="colorAccent">@color/color_accent</item>
+ <item name="android:textColorPrimary">@color/primary</item>
+ <item name="android:windowFrame">@color/transparent</item>
+ <item name="android:windowBackground">@color/transparent</item>
+ <item name="android:windowTitleBackgroundStyle">@drawable/process_dialog_background</item>
+ </style>
+
+ <style name="ownCloud.Button" parent="Widget.AppCompat.Button">
+ <item name="colorButtonNormal">@color/primary</item>
+ </style>
+
+ <style name="Button" parent="Base.Widget.AppCompat.Button">
+ <item name="colorButtonNormal">@color/secondary_button_color</item>
+ <item name="android:textColor">@color/color_accent</item>
+ </style>
+
+ <style name="Button.Primary" parent="Button">
+ <item name="colorButtonNormal">@color/primary_button_color</item>
+ <item name="android:textColor">@color/white</item>
+ </style>
+
+ <style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
+ <item name="android:textColor">@color/color_accent</item>
+ </style>
+
+ <!-- separat translucent action bar style -->
+ <style name="Theme.ownCloud.Overlay" parent="style/Theme.ownCloud">
+ <item name="android:actionBarStyle">@style/Theme.ownCloud.Overlay.ActionBar</item>
+ <item name="windowActionBarOverlay">true</item>
+ <!-- Support library compatibility -->
+ <item name="actionBarStyle">@style/Theme.ownCloud.Overlay.ActionBar</item>
+ </style>
+
+ <!-- ACTION BAR STYLES -->
+ <style name="Theme.ownCloud.Overlay.ActionBar" parent="@style/Widget.AppCompat.ActionBar">
+ <item name="android:background">@color/owncloud_blue_transparent</item>
+ <item name="android:windowActionBarOverlay">true</item>
+
+ <!-- Support library compatibility -->
+ <item name="background">@color/owncloud_blue_transparent</item>
+ <item name="windowActionBarOverlay">true</item>
+ </style>
+
+ <!-- Progress bar -->
+ <style name="Widget.ownCloud.TopProgressBar" parent="style/Widget.AppCompat.ProgressBar.Horizontal">
+ <item name="android:progressDrawable">@drawable/actionbar_progress_horizontal</item>
+ <item name="android:indeterminateDrawable">@drawable/actionbar_progress_indeterminate_horizontal</item>
+ </style>
+
<style name="Theme.ownCloud.Fullscreen" parent="style/Theme.AppCompat">
<item name="android:windowFullscreen">true</item>
+ <item name="colorAccent">@color/color_accent</item>
</style>
<style name="Theme.ownCloud.Widget.ActionBar"
parent="style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
- <item name="android:background">@drawable/main_header_bg</item>
+ <item name="android:background">@color/owncloud_blue</item>
<item name="background">@drawable/main_header_bg</item>
<item name="android:textColor">#ffffff</item>
<item name="android:shadowColor">#222222</item>
</style>
<!-- Dialogs -->
- <style name="Theme.ownCloud.Dialog" parent="@android:style/Theme.Dialog">
+ <style name="Theme.ownCloud.Dialog" parent="style/Theme.AppCompat.Light.Dialog.Alert">
+ <item name="windowNoTitle">false</item>
+ <item name="colorAccent">@color/owncloud_blue_accent</item>
+ <item name="buttonBarButtonStyle">@style/Theme.ownCloud.Dialog.ButtonBar.Button</item>
+ <item name="buttonBarStyle">@style/Theme.ownCloud.Dialog.ButtonBar</item>
+ </style>
+
+ <style name="menu_labels_style">
+ <item name="android:background">@drawable/fab_label_background</item>
+ <item name="android:textColor">@color/fab_white</item>
+ </style>
+
+ <!-- Button Bar hack due to Lollipop bug:
+ https://code.google.com/p/android/issues/detail?id=78302
+ fix see:
+ http://stackoverflow.com/questions/27187353/dialog-buttons-with-long-text-not-wrapping-squeezed-out-material-theme-on-an
+ -->
+ <style name="Theme.ownCloud.Dialog.ButtonBar" parent="style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
+ <!-- Making sure, the button bar uses parent width and is not restricted in height -->
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:height">@null</item>
+ <item name="android:minHeight">@null</item>
+ </style>
+
+ <style name="Theme.ownCloud.Dialog.ButtonBar.Button" parent="style/Widget.AppCompat.Button.Borderless.Colored">
+ <!-- Setting the weight as follows should result in equally wide buttons filling the alert dialog width,
+ but instead they span further out of the dialog, breaking in multiple lines though -->
+ <item name="android:layout_width">0dp</item>
+ <item name="android:layout_weight">1</item>
+ <!-- setting a fixed width as follows results in narrow buttons with line breaks, but of course this is not a solution -->
+ <!-- <item name="android:width">100dp</item> -->
</style>
<!-- PopDownMenu -->
</style>
- <style name="OAuthDialog" parent="@android:style/Theme.Dialog">
- <item name="android:windowNoTitle">false</item>
+ <style name="OAuthDialog" parent="style/Theme.AppCompat.Light.Dialog.Alert">
+ <item name="windowNoTitle">false</item>
+ <item name="colorAccent">@color/owncloud_blue_accent</item>
</style>
<color name="setup_text_hint">#777777</color>
<color name="setup_text_typed">#000000</color>
+ <style name="Theme.ownCloud.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
+ <style name="Theme.ownCloud.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
+ <style name="Theme.ownCloud.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <!-- Buttons -->
- <style name="Theme.ownCloud.ButtonStyle" parent="@android:style/Widget.Button">
- <item name="android:background">@android:drawable/btn_default</item>
- <item name="android:textColor">@color/button_text_color</item>
- </style>
-
+
<!-- DropDown -->
<style name="Theme.ownCloud.DropDownStyle"
parent="style/Widget.AppCompat.Spinner.DropDown.ActionBar">
ownCloud Android client application
Copyright (C) 2012 Bartek Przybylski
- Copyright (C) 2015 ownCloud Inc.
+ Copyright (C) 2012-2013 ownCloud Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2,
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
+ <PreferenceCategory android:title="@string/prefs_category_general">
+ <com.owncloud.android.ui.PreferenceWithLongSummary
+ android:title="@string/prefs_storage_path"
+ android:key="storage_path" />
+ </PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_category_accounts" android:key="accounts_category">
</PreferenceCategory>
-
+
<PreferenceCategory android:title="@string/prefs_category_security">
- <android.preference.CheckBoxPreference android:title="@string/prefs_passcode" android:key="set_pincode" />
+ <android.preference.CheckBoxPreference android:title="@string/prefs_passcode" android:key="set_pincode" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_category_instant_uploading" android:key="instant_uploading_category">
- <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:key="instant_uploading"
+ <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:key="instant_uploading"
android:title="@string/prefs_instant_upload"
android:summary="@string/prefs_instant_upload_summary"/>
<com.owncloud.android.ui.PreferenceWithLongSummary
android:title="@string/prefs_instant_upload_path_title"
android:key="instant_upload_path" />
<com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle
- android:title="@string/instant_upload_on_wifi"
- android:key="instant_upload_on_wifi"/>
- <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:key="instant_video_uploading"
- android:title="@string/prefs_instant_video_upload"
- android:summary="@string/prefs_instant_video_upload_summary" />
+ android:dependency="instant_uploading"
+ android:disableDependentsState="true"
+ android:title="@string/instant_upload_on_wifi"
+ android:key="instant_upload_on_wifi"/>
+ <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle
+ android:dependency="instant_uploading"
+ android:disableDependentsState="true"
+ android:title="@string/instant_upload_on_charging"
+ android:key="instant_upload_on_charging"/>
+
+ <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle
+ android:key="instant_video_uploading"
+ android:title="@string/prefs_instant_video_upload"
+ android:summary="@string/prefs_instant_video_upload_summary" />
<com.owncloud.android.ui.PreferenceWithLongSummary
- android:title="@string/prefs_instant_video_upload_path_title"
- android:key="instant_video_upload_path" />
+ android:dependency="instant_video_uploading"
+ android:disableDependentsState="true"
+ android:title="@string/prefs_instant_video_upload_path_title"
+ android:key="instant_video_upload_path" />
<com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle
- android:title="@string/instant_video_upload_on_wifi"
- android:key="instant_video_upload_on_wifi"/>
- <!-- DISABLED FOR RELEASE UNTIL FIXED
+ android:dependency="instant_video_uploading"
+ android:disableDependentsState="true"
+ android:title="@string/instant_video_upload_on_wifi"
+ android:key="instant_video_upload_on_wifi"/>
+ <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle
+ android:dependency="instant_video_uploading"
+ android:disableDependentsState="true"
+ android:title="@string/instant_video_upload_on_charging"
+ android:key="instant_video_upload_on_charging"/>
+ <com.owncloud.android.ui.dialog.OwnCloudListPreference android:key="prefs_instant_behaviour"
+ android:dialogTitle="@string/prefs_instant_behaviour_dialogTitle"
+ android:title="@string/prefs_instant_behaviour_title"
+ android:entries="@array/pref_behaviour_entries"
+ android:entryValues="@array/pref_behaviour_entryValues"
+ android:defaultValue="NOTHING"
+ android:summary="%s"
+ />
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/common_category" android:key="common_category">
+ <EditTextPreference android:title="@string/pref_cache_size"
+ android:key="pref_cache_size"
+ android:digits="0123456789"/>
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/prefs_category_more" android:key="more">
+ <!-- DISABLED FOR RELEASE UNTIL FIXED
CheckBoxPreference android:key="log_to_file"
android:title="@string/prefs_log_title"
android:summary="@string/prefs_log_summary"/>
<Preference android:key="log_history"
android:title="@string/prefs_log_title_history"
android:summary="@string/prefs_log_summary_history"/ -->
-
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/prefs_category_more" android:key="more">
<Preference android:title="@string/prefs_help" android:key="help" />
<Preference android:title="@string/prefs_recommend" android:key="recommend" />
<Preference android:title="@string/prefs_feedback" android:key="feedback" />
<Preference android:title="@string/prefs_imprint" android:key="imprint" />
-
- <Preference android:id="@+id/about_app"
- android:title="@string/about_title"
+
+ <Preference android:id="@+id/about_app"
+ android:title="@string/about_title"
android:key="about_app" />
- </PreferenceCategory>
-
+ <Preference android:id="@+id/beta_link"
+ android:title="Download latest beta version"
+ android:key="beta_link" />
+
+ <Preference android:id="@+id/changelog_link"
+ android:title="Changelog beta version"
+ android:key="changelog_link" />
+
+ </PreferenceCategory>
</PreferenceScreen>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ownCloud Android client application
+
+ @author David A. Velasco
+ Copyright (C) 2015 ownCloud Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2,
+ as published by the Free Software Foundation.
+
+ 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 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/>.
+-->
+
+<!-- Searchable configuration to search users & groups in an OC server -->
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+ android:label="@string/app_name"
+ android:hint="@string/search_users_and_groups_hint"
+ android:searchSuggestAuthority="com.owncloud.android.providers.UsersAndGroupsSearchProvider"
+ android:searchSuggestIntentAction="com.owncloud.android.providers.UsersAndGroupsSearchProvider.action.SHARE_WITH"
+ android:searchSuggestThreshold="1" >
+</searchable>
\ No newline at end of file
call git submodule init
call git submodule update
-call android.bat update project -p libs/android-support-appcompat-v7-exploded-aar --target android-16
+call android.bat update project -p libs/android-support-appcompat-v7-exploded-aar --target android-23
+call android.bat update project -p libs/com-getbase-floatingactionbutton-1-10-1-exploded-aar --target android-23
call android.bat update lib-project -p owncloud-android-library
call android.bat update project -p .
call android.bat update project -p oc_jb_workaround
git submodule update
#Prepare project android-support-appcompat-v7 ; JAR file is not enough, includes resources
- android update lib-project -p libs/android-support-appcompat-v7-exploded-aar --target android-16
+ android update lib-project -p libs/android-support-appcompat-v7-exploded-aar --target android-23
+ android update lib-project -p libs/com-getbase-floatingactionbutton-1-10-1-exploded-aar --target android-23
#As default it updates the ant scripts
android update lib-project -p owncloud-android-library
import android.app.Activity;
import android.app.Application;
import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
+import android.os.Environment;
+import android.preference.PreferenceManager;
import com.owncloud.android.authentication.PassCodeManager;
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.utils.ExceptionHandler;
/**
private static Context mContext;
- // TODO Enable when "On Device" is recovered?
- // TODO better place
- // private static boolean mOnlyOnDevice = false;
+ private static String storagePath;
+
+ private static boolean mOnlyOnDevice = false;
public void onCreate(){
super.onCreate();
MainApp.mContext = getApplicationContext();
+
+ // Setup handler for uncaught exceptions.
+ Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
+
+ SharedPreferences appPrefs =
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ MainApp.storagePath = appPrefs.getString("storage_path", Environment.
+ getExternalStorageDirectory().getAbsolutePath());
+
boolean isSamlAuth = AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso));
OwnCloudClientManagerFactory.setUserAgent(getUserAgent());
// Set folder for store logs
Log_OC.setLogDataFolder(dataFolder);
- Log_OC.startLogging();
+ Log_OC.startLogging(MainApp.storagePath);
Log_OC.d("Debug", "start logging");
}
return MainApp.mContext;
}
+ public static String getStoragePath(){
+ return MainApp.storagePath;
+ }
+
+ public static void setStoragePath(String path){
+ MainApp.storagePath = path;
+ }
+
// Methods to obtain Strings referring app_name
// From AccountAuthenticator
// public static final String ACCOUNT_TYPE = "owncloud";
return getAppContext().getResources().getString(R.string.log_name);
}
- // TODO Enable when "On Device" is recovered ?
-// public static void showOnlyFilesOnDevice(boolean state){
-// mOnlyOnDevice = state;
-// }
-//
-// public static boolean getOnlyOnDevice(){
-// return mOnlyOnDevice;
-// }
+ public static void showOnlyFilesOnDevice(boolean state){
+ mOnlyOnDevice = state;
+ }
+
+ public static boolean getOnlyOnDevice(){
+ return mOnlyOnDevice;
+ }
// user agent
public static String getUserAgent() {
import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
/*
* Base class for implementing an Activity that is used to help implement an AbstractAccountAuthenticator.
* then error AccountManager.ERROR_CODE_CANCELED will be called on the response.
*/
-public class AccountAuthenticatorActivity extends ActionBarActivity {
+public class AccountAuthenticatorActivity extends AppCompatActivity {
private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
private Bundle mResultBundle = null;
return serverVersion;\r
}\r
\r
+ public static boolean hasSearchUsersSupport(Account account){\r
+ OwnCloudVersion serverVersion = null;\r
+ if (account != null) {\r
+ AccountManager accountMgr = AccountManager.get(MainApp.getAppContext());\r
+ String serverVersionStr = accountMgr.getUserData(account, Constants.KEY_OC_VERSION);\r
+ if (serverVersionStr != null) {\r
+ serverVersion = new OwnCloudVersion(serverVersionStr);\r
+ }\r
+ }\r
+ return (serverVersion != null ? serverVersion.isSearchUsersSupported() : false);\r
+ }\r
}\r
\r
package com.owncloud.android.authentication;\r
\r
-import java.security.cert.X509Certificate;\r
-import java.util.Map;\r
-\r
import android.accounts.Account;\r
import android.accounts.AccountManager;\r
import android.app.Dialog;\r
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;\r
import com.owncloud.android.utils.DisplayUtils;\r
\r
+import java.security.cert.X509Certificate;\r
+import java.util.Map;\r
+\r
/**\r
* This Activity is used to add an ownCloud account to the App\r
*/\r
\r
/// initialize general UI elements\r
initOverallUi();\r
- \r
+\r
mOkButton = findViewById(R.id.buttonOK);\r
+ mOkButton.setOnClickListener(new View.OnClickListener() {\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ onOkClick();\r
+ }\r
+ });\r
+\r
+ findViewById(R.id.centeredRefreshButton).setOnClickListener(new View.OnClickListener() {\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ checkOcServer();\r
+ }\r
+ });\r
+\r
+ findViewById(R.id.embeddedRefreshButton).setOnClickListener(new View.OnClickListener() {\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ checkOcServer();\r
+ }\r
+ });\r
+\r
\r
/// initialize block to be moved to single Fragment to check server and get info about it \r
initServerPreFragment(savedInstanceState);\r
\r
mHostUrlInput.removeTextChangedListener(mHostUrlInputWatcher);\r
mHostUrlInput.setOnFocusChangeListener(null);\r
- \r
+\r
super.onPause();\r
}\r
\r
mOAuthTokenEndpointText.getText().toString().trim());\r
\r
getServerInfoIntent.putExtra(\r
- OperationsService.EXTRA_OAUTH2_QUERY_PARAMETERS, \r
+ OperationsService.EXTRA_OAUTH2_QUERY_PARAMETERS,\r
queryParameters);\r
\r
if (mOperationsServiceBinder != null) {\r
showRefreshButton(false);\r
\r
if (uri.length() != 0) {\r
+ uri = stripIndexPhpOrAppsFiles(uri, mHostUrlInput);\r
+\r
// Handle internationalized domain names\r
uri = DisplayUtils.convertIdn(uri, true);\r
\r
Intent getServerInfoIntent = new Intent();\r
getServerInfoIntent.setAction(OperationsService.ACTION_GET_SERVER_INFO);\r
getServerInfoIntent.putExtra(\r
- OperationsService.EXTRA_SERVER_URL,\r
- normalizeUrlSuffix(uri)\r
+ OperationsService.EXTRA_SERVER_URL,\r
+ normalizeUrlSuffix(uri)\r
);\r
if (mOperationsServiceBinder != null) {\r
mWaitingForOpId = mOperationsServiceBinder.queueNewOperation(getServerInfoIntent);\r
* is postponed until it is available.\r
* \r
* IMPORTANT ENTRY POINT 4\r
- * \r
- * @param view OK button\r
*/\r
- public void onOkClick(View view) {\r
+ public void onOkClick() {\r
// this check should be unnecessary\r
if (mServerInfo.mVersion == null || \r
!mServerInfo.mVersion.isVersionValid() || \r
return url;\r
}\r
\r
+ private String stripIndexPhpOrAppsFiles(String url, EditText mHostUrlInput) {\r
+ if (url.endsWith("/index.php")) {\r
+ url = url.substring(0, url.lastIndexOf("/index.php"));\r
+ mHostUrlInput.setText(url);\r
+ } else if (url.contains("/index.php/apps/")) {\r
+ url = url.substring(0, url.lastIndexOf("/index.php/apps/"));\r
+ mHostUrlInput.setText(url);\r
+ }\r
+\r
+ return url;\r
+ }\r
\r
// TODO remove, if possible\r
private String trimUrlWebdav(String url){ \r
\r
switch (result.getCode()) {\r
case OK_SSL:\r
- mServerStatusIcon = android.R.drawable.ic_secure;\r
+ mServerStatusIcon = R.drawable.ic_lock;\r
mServerStatusText = R.string.auth_secure_connection;\r
break;\r
\r
mServerStatusIcon = R.drawable.ic_ok;\r
} else {\r
mServerStatusText = R.string.auth_nossl_plain_ok_title;\r
- mServerStatusIcon = android.R.drawable.ic_partial_secure;\r
+ mServerStatusIcon = R.drawable.ic_lock_open;\r
}\r
break;\r
\r
mServerStatusText = R.string.auth_unknown_error_title;\r
break;\r
case OK_REDIRECT_TO_NON_SECURE_CONNECTION:\r
- mServerStatusIcon = android.R.drawable.ic_partial_secure;\r
+ mServerStatusIcon = R.drawable.ic_lock_open;\r
mServerStatusText = R.string.auth_redirect_non_secure_connection_title;\r
break;\r
default:\r
\r
switch (result.getCode()) {\r
case OK_SSL:\r
- mAuthStatusIcon = android.R.drawable.ic_secure;\r
+ mAuthStatusIcon = R.drawable.ic_lock;\r
mAuthStatusText = R.string.auth_secure_connection;\r
break;\r
\r
mAuthStatusIcon = R.drawable.ic_ok;\r
} else {\r
mAuthStatusText = R.string.auth_nossl_plain_ok_title;\r
- mAuthStatusIcon = android.R.drawable.ic_partial_secure;\r
+ mAuthStatusIcon = R.drawable.ic_lock_open;\r
}\r
break;\r
\r
public void onAuthenticatorTaskCallback(RemoteOperationResult result) {\r
mWaitingForOpId = Long.MAX_VALUE;\r
dismissDialog(WAIT_DIALOG_TAG);\r
+ mAsyncTask = null;\r
\r
if (result.isSuccess()) {\r
Log_OC.d(TAG, "Successful access - time to save the account");\r
}\r
\r
/**\r
- * Called when the refresh button in the input field for ownCloud host is clicked.\r
- * \r
- * Performs a new check on the URL in the input field.\r
- * \r
- * @param view Refresh 'button'\r
- */\r
- public void onRefreshClick(View view) {\r
- checkOcServer();\r
- }\r
-\r
-\r
- /**\r
* Called when the eye icon in the password field is clicked.\r
* \r
* Toggles the visibility of the password in the field. \r
){
Intent i = new Intent(MainApp.getAppContext(), PassCodeActivity.class);
- i.setAction(PassCodeActivity.ACTION_REQUEST);
+ i.setAction(PassCodeActivity.ACTION_CHECK);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
activity.startActivity(i);
package com.owncloud.android.datamodel;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
import android.accounts.Account;
import android.content.ContentProviderClient;
import android.content.ContentProviderOperation;
import com.owncloud.android.MainApp;
import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.lib.resources.status.CapabilityBooleanType;
+import com.owncloud.android.lib.resources.status.OCCapability;
import com.owncloud.android.utils.FileStorageUtils;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
public class FileDataStorageManager {
public static final int ROOT_PARENT_ID = 0;
private static String TAG = FileDataStorageManager.class.getSimpleName();
-
+
public FileDataStorageManager(Account account, ContentResolver cr) {
mContentProviderClient = null;
mContentResolver = cr;
mAccount = account;
}
-
+
public void setAccount(Account account) {
mAccount = account;
}
return mAccount;
}
- public void setContentResolver(ContentResolver cr) {
- mContentResolver = cr;
- }
-
public ContentResolver getContentResolver() {
return mContentResolver;
}
- public void setContentProviderClient(ContentProviderClient cp) {
- mContentProviderClient = cp;
- }
-
public ContentProviderClient getContentProviderClient() {
return mContentProviderClient;
}
-
+
public OCFile getFileByPath(String path) {
Cursor c = getCursorForValue(ProviderTableMeta.FILE_PATH, path);
return fileExists(ProviderTableMeta.FILE_PATH, path);
}
-
- public Vector<OCFile> getFolderContent(OCFile f/*, boolean onlyOnDevice*/) {
+
+ public Vector<OCFile> getFolderContent(OCFile f, boolean onlyOnDevice) {
if (f != null && f.isFolder() && f.getFileId() != -1) {
- // TODO Enable when "On Device" is recovered ?
- return getFolderContent(f.getFileId()/*, onlyOnDevice*/);
+ return getFolderContent(f.getFileId(), onlyOnDevice);
} else {
return new Vector<OCFile>();
}
}
-
-
- public Vector<OCFile> getFolderImages(OCFile folder/*, boolean onlyOnDevice*/) {
+
+
+ public Vector<OCFile> getFolderImages(OCFile folder, boolean onlyOnDevice) {
Vector<OCFile> ret = new Vector<OCFile>();
if (folder != null) {
// TODO better implementation, filtering in the access to database instead of here
- // TODO Enable when "On Device" is recovered ?
- Vector<OCFile> tmp = getFolderContent(folder/*, onlyOnDevice*/);
+ Vector<OCFile> tmp = getFolderContent(folder, onlyOnDevice);
OCFile current = null;
for (int i=0; i<tmp.size(); i++) {
current = tmp.get(i);
boolean overriden = false;
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
- cv.put(
- ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
- file.getModificationTimestampAtLastSyncForData()
+ cv.put(
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ file.getModificationTimestampAtLastSyncForData()
);
cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
cv.put(ProviderTableMeta.FILE_NAME, file.getFileName());
- //if (file.getParentId() != DataStorageManager.ROOT_PARENT_ID)
- cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId());
+ cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId());
cv.put(ProviderTableMeta.FILE_PATH, file.getRemotePath());
if (!file.isFolder())
cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, file.getLastSyncDateForData());
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.isFavorite() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
- cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, file.isSharedViaLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, file.isSharedWithSharee() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading());
-
+ cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, file.getEtagInConflict());
+
boolean sameRemotePath = fileExists(file.getRemotePath());
if (sameRemotePath ||
- fileExists(file.getFileId()) ) { // for renamed files
+ fileExists(file.getFileId())) { // for renamed files; no more delete and create
- OCFile oldFile = null;
+ OCFile oldFile;
if (sameRemotePath) {
oldFile = getFileByPath(file.getRemotePath());
file.setFileId(oldFile.getFileId());
if (getContentResolver() != null) {
getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv,
ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(file.getFileId()) });
+ new String[]{String.valueOf(file.getFileId())});
} else {
try {
getContentProviderClient().update(ProviderTableMeta.CONTENT_URI,
cv, ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(file.getFileId()) });
+ new String[]{String.valueOf(file.getFileId())});
} catch (RemoteException e) {
Log_OC.e(TAG,
"Fail to insert insert file to database "
long new_id = Long.parseLong(result_uri.getPathSegments()
.get(1));
file.setFileId(new_id);
- }
+ }
}
-// if (file.isFolder()) {
-// updateFolderSize(file.getFileId());
-// } else {
-// updateFolderSize(file.getParentId());
-// }
-
return overriden;
}
/**
* Inserts or updates the list of files contained in a given folder.
- *
+ * <p/>
* CALLER IS THE RESPONSIBLE FOR GRANTING RIGHT UPDATE OF INFORMATION, NOT THIS METHOD.
* HERE ONLY DATA CONSISTENCY SHOULD BE GRANTED
- *
+ *
* @param folder
* @param updatedFiles
* @param filesToRemove
*/
public void saveFolder(
OCFile folder, Collection<OCFile> updatedFiles, Collection<OCFile> filesToRemove
- ) {
-
- Log_OC.d(TAG, "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size()
+ ) {
+
+ Log_OC.d(TAG, "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size()
+ " children and " + filesToRemove.size() + " files to remove");
- ArrayList<ContentProviderOperation> operations =
+ ArrayList<ContentProviderOperation> operations =
new ArrayList<ContentProviderOperation>(updatedFiles.size());
// prepare operations to insert or update files to save in the given folder
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
cv.put(
- ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
- file.getModificationTimestampAtLastSyncForData()
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ file.getModificationTimestampAtLastSyncForData()
);
cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, file.getLastSyncDateForData());
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.isFavorite() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
- cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, file.isSharedViaLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, file.isSharedWithSharee() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading());
+ cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, file.getEtagInConflict());
boolean existsByPath = fileExists(file.getRemotePath());
if (existsByPath || fileExists(file.getFileId())) {
// updating an existing file
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
withValues(cv).
- withSelection( ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(file.getFileId()) })
- .build());
+ withSelection(ProviderTableMeta._ID + "=?",
+ new String[]{String.valueOf(file.getFileId())})
+ .build());
} else {
// adding a new file
withValues(cv).build());
}
}
-
+
// prepare operations to remove files in the given folder
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
ProviderTableMeta.FILE_PATH + "=?";
String [] whereArgs = null;
for (OCFile file : filesToRemove) {
if (file.getParentId() == folder.getFileId()) {
whereArgs = new String[]{mAccount.name, file.getRemotePath()};
- //Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, "" + file.getFileId());
if (file.isFolder()) {
operations.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(
ProviderTableMeta.CONTENT_URI_DIR, file.getFileId()
)
).withSelection(where, whereArgs).build());
-
- File localFolder =
+
+ File localFolder =
new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file));
if (localFolder.exists()) {
removeLocalFolder(localFolder);
ProviderTableMeta.CONTENT_URI_FILE, file.getFileId()
)
).withSelection(where, whereArgs).build());
-
+
if (file.isDown()) {
String path = file.getStoragePath();
new File(path).delete();
}
}
}
-
+
// update metadata of folder
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, folder.getModificationTimestamp());
cv.put(
- ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
- folder.getModificationTimestampAtLastSyncForData()
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ folder.getModificationTimestampAtLastSyncForData()
);
cv.put(ProviderTableMeta.FILE_CREATION, folder.getCreationTimestamp());
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, 0);
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, folder.getLastSyncDateForData());
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, folder.isFavorite() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag());
- cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, folder.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, folder.isSharedViaLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, folder.isSharedWithSharee() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink());
cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions());
cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId());
-
+
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
withValues(cv).
- withSelection( ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(folder.getFileId()) })
- .build());
+ withSelection(ProviderTableMeta._ID + "=?",
+ new String[]{String.valueOf(folder.getFileId())})
+ .build());
// apply operations in batch
ContentProviderResult[] results = null;
long newId;
Iterator<OCFile> filesIt = updatedFiles.iterator();
OCFile file = null;
- for (int i=0; i<results.length; i++) {
+ for (int i = 0; i < results.length; i++) {
if (filesIt.hasNext()) {
file = filesIt.next();
} else {
}
}
}
-
- //updateFolderSize(folder.getFileId());
-
- }
+ }
-// /**
-// *
-// * @param id
-// */
-// private void updateFolderSize(long id) {
-// if (id > FileDataStorageManager.ROOT_PARENT_ID) {
-// Log_OC.d(TAG, "Updating size of " + id);
-// if (getContentResolver() != null) {
-// getContentResolver().update(ProviderTableMeta.CONTENT_URI_DIR,
-// new ContentValues(),
- // won't be used, but cannot be null; crashes in KLP
-// ProviderTableMeta._ID + "=?",
-// new String[] { String.valueOf(id) });
-// } else {
-// try {
-// getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_DIR,
-// new ContentValues(),
- // won't be used, but cannot be null; crashes in KLP
-// ProviderTableMeta._ID + "=?",
-// new String[] { String.valueOf(id) });
-//
-// } catch (RemoteException e) {
-// Log_OC.e(
-// TAG, "Exception in update of folder size through compatibility patch " + e.getMessage());
-// }
-// }
-// } else {
-// Log_OC.e(TAG, "not updating size for folder " + id);
-// }
-// }
-
public boolean removeFile(OCFile file, boolean removeDBData, boolean removeLocalCopy) {
boolean success = true;
if (file != null) {
if (file.isFolder()) {
success = removeFolder(file, removeDBData, removeLocalCopy);
-
+
} else {
if (removeDBData) {
- Uri file_uri = ContentUris.withAppendedId(
- ProviderTableMeta.CONTENT_URI_FILE,
- file.getFileId()
- );
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
+ //Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE,
+ // ""+file.getFileId());
+ Uri file_uri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE,
+ file.getFileId());
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
ProviderTableMeta.FILE_PATH + "=?";
- String [] whereArgs = new String[]{mAccount.name, file.getRemotePath()};
+ String[] whereArgs = new String[]{mAccount.name, file.getRemotePath()};
int deleted = 0;
if (getContentProviderClient() != null) {
try {
} else {
deleted = getContentResolver().delete(file_uri, where, whereArgs);
}
- success &= (deleted > 0);
+ success &= (deleted > 0);
}
String localPath = file.getStoragePath();
if (removeLocalCopy && file.isDown() && localPath != null && success) {
// maybe unnecessary, but should be checked TODO remove if unnecessary
file.setStoragePath(null);
saveFile(file);
+ saveConflict(file, null);
}
}
}
}
return success;
}
-
+
public boolean removeFolder(OCFile folder, boolean removeDBData, boolean removeLocalContent) {
boolean success = true;
if (folder != null && folder.isFolder()) {
- if (removeDBData && folder.getFileId() != -1) {
+ if (removeDBData && folder.getFileId() != -1) {
success = removeFolderInDb(folder);
}
if (removeLocalContent && success) {
}
private boolean removeFolderInDb(OCFile folder) {
- Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, "" +
+ Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, "" +
folder.getFileId()); // URI for recursive deletion
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
ProviderTableMeta.FILE_PATH + "=?";
String [] whereArgs = new String[]{mAccount.name, folder.getRemotePath()};
int deleted = 0;
e.printStackTrace();
}
} else {
- deleted = getContentResolver().delete(folder_uri, where, whereArgs);
+ deleted = getContentResolver().delete(folder_uri, where, whereArgs);
}
return deleted > 0;
}
File localFolder = new File(localFolderPath);
if (localFolder.exists()) {
// stage 1: remove the local files already registered in the files database
- // TODO Enable when "On Device" is recovered ?
- Vector<OCFile> files = getFolderContent(folder.getFileId()/*, false*/);
+ Vector<OCFile> files = getFolderContent(folder.getFileId(), false);
if (files != null) {
for (OCFile file : files) {
if (file.isFolder()) {
return success;
}
-
+
/**
* Updates database and file system for a file or folder that was moved to a different location.
- *
+ *
* TODO explore better (faster) implementations
* TODO throw exceptions up !
*/
public void moveLocalFile(OCFile file, String targetPath, String targetParentPath) {
if (file != null && file.fileExists() && !OCFile.ROOT_PATH.equals(file.getFileName())) {
-
+
OCFile targetParent = getFileByPath(targetParentPath);
if (targetParent == null) {
- throw new IllegalStateException("Parent folder of the target path does not exist!!");
+ throw new IllegalStateException(
+ "Parent folder of the target path does not exist!!");
}
-
+
/// 1. get all the descendants of the moved element in a single QUERY
Cursor c = null;
if (getContentProviderClient() != null) {
try {
c = getContentProviderClient().query(
- ProviderTableMeta.CONTENT_URI,
- null,
- ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
- ProviderTableMeta.FILE_PATH + " LIKE ? ",
- new String[] {
- mAccount.name,
- file.getRemotePath() + "%"
- },
- ProviderTableMeta.FILE_PATH + " ASC "
+ ProviderTableMeta.CONTENT_URI,
+ null,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ? ",
+ new String[]{
+ mAccount.name,
+ file.getRemotePath() + "%"
+ },
+ ProviderTableMeta.FILE_PATH + " ASC "
);
} catch (RemoteException e) {
Log_OC.e(TAG, e.getMessage());
}
-
+
} else {
c = getContentResolver().query(
- ProviderTableMeta.CONTENT_URI,
- null,
- ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
- ProviderTableMeta.FILE_PATH + " LIKE ? ",
- new String[] {
- mAccount.name,
- file.getRemotePath() + "%"
- },
- ProviderTableMeta.FILE_PATH + " ASC "
+ ProviderTableMeta.CONTENT_URI,
+ null,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ? ",
+ new String[]{
+ mAccount.name,
+ file.getRemotePath() + "%"
+ },
+ ProviderTableMeta.FILE_PATH + " ASC "
);
}
/// 2. prepare a batch of update operations to change all the descendants
- ArrayList<ContentProviderOperation> operations =
+ ArrayList<ContentProviderOperation> operations =
new ArrayList<ContentProviderOperation>(c.getCount());
String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name);
List<String> originalPathsToTriggerMediaScan = new ArrayList<String>();
ContentValues cv = new ContentValues(); // keep construction in the loop
OCFile child = createFileInstance(c);
cv.put(
- ProviderTableMeta.FILE_PATH,
- targetPath + child.getRemotePath().substring(lengthOfOldPath)
+ ProviderTableMeta.FILE_PATH,
+ targetPath + child.getRemotePath().substring(lengthOfOldPath)
);
- if (child.getStoragePath() != null &&
+ if (child.getStoragePath() != null &&
child.getStoragePath().startsWith(defaultSavePath)) {
// update link to downloaded content - but local move is not done here!
- String targetLocalPath = defaultSavePath + targetPath +
+ String targetLocalPath = defaultSavePath + targetPath +
child.getStoragePath().substring(lengthOfOldStoragePath);
-
+
cv.put(ProviderTableMeta.FILE_STORAGE_PATH, targetLocalPath);
-
+
originalPathsToTriggerMediaScan.add(child.getStoragePath());
newPathsToTriggerMediaScan.add(targetLocalPath);
-
+
}
if (child.getRemotePath().equals(file.getRemotePath())) {
cv.put(
ProviderTableMeta.FILE_PARENT,
targetParent.getFileId()
- );
+ );
}
operations.add(
- ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
- withValues(cv).
- withSelection(
- ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(child.getFileId()) }
+ ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).
+ withSelection(
+ ProviderTableMeta._ID + "=?",
+ new String[]{String.valueOf(child.getFileId())}
)
- .build());
-
+ .build());
+
} while (c.moveToNext());
}
c.close();
}
} catch (Exception e) {
- Log_OC.e(TAG, "Fail to update " + file.getFileId() + " and descendants in database", e);
+ Log_OC.e(TAG, "Fail to update " + file.getFileId() + " and descendants in database",
+ e);
}
/// 4. move in local file system
}
}
}
-
+
}
+
+ public void copyLocalFile(OCFile file, String targetPath) {
+
+ if (file != null && file.fileExists() && !OCFile.ROOT_PATH.equals(file.getFileName())) {
+ String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file);
+ File localFile = new File(localPath);
+ boolean copied = false;
+ String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name);
+ if (localFile.exists()) {
+ File targetFile = new File(defaultSavePath + targetPath);
+ File targetFolder = targetFile.getParentFile();
+ if (!targetFolder.exists()) {
+ targetFolder.mkdirs();
+ }
+ copied = FileStorageUtils.copyFile(localFile, targetFile);
+ }
+ Log_OC.d(TAG, "Local file COPIED : " + copied);
+ }
+ }
+
+ public void migrateStoredFiles(String srcPath, String dstPath) throws Exception {
+ Cursor c = null;
+ if (getContentResolver() != null) {
+ c = getContentResolver().query(ProviderTableMeta.CONTENT_URI_FILE,
+ null,
+ ProviderTableMeta.FILE_STORAGE_PATH + " IS NOT NULL",
+ null,
+ null);
+
+ } else {
+ try {
+ c = getContentProviderClient().query(ProviderTableMeta.CONTENT_URI_FILE,
+ new String[]{ProviderTableMeta._ID, ProviderTableMeta.FILE_STORAGE_PATH},
+ ProviderTableMeta.FILE_STORAGE_PATH + " IS NOT NULL",
+ null,
+ null);
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, e.getMessage());
+ throw e;
+ }
+ }
+
+ ArrayList<ContentProviderOperation> operations =
+ new ArrayList<ContentProviderOperation>(c.getCount());
+ if (c.moveToFirst()) {
+ do {
+ ContentValues cv = new ContentValues();
+ long fileId = c.getLong(c.getColumnIndex(ProviderTableMeta._ID));
+ String oldFileStoragePath = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH));
+
+ if (oldFileStoragePath.startsWith(srcPath)) {
+
+ cv.put(
+ ProviderTableMeta.FILE_STORAGE_PATH,
+ oldFileStoragePath.replaceFirst(srcPath, dstPath));
+
+ operations.add(
+ ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).
+ withSelection(
+ ProviderTableMeta._ID + "=?",
+ new String[]{String.valueOf(fileId)}
+ )
+ .build());
+ }
+
+ } while (c.moveToNext());
+ }
+ c.close();
+
+ /// 3. apply updates in batch
+ try {
+ if (getContentResolver() != null) {
+ getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (Exception e) {
+ throw e;
+ }
+ }
+
-
- private Vector<OCFile> getFolderContent(long parentId/*, boolean onlyOnDevice*/) {
+ private Vector<OCFile> getFolderContent(long parentId, boolean onlyOnDevice) {
Vector<OCFile> ret = new Vector<OCFile>();
if (getContentProviderClient() != null) {
try {
- c = getContentProviderClient().query(req_uri, null,
- ProviderTableMeta.FILE_PARENT + "=?" ,
- new String[] { String.valueOf(parentId)}, null);
+ c = getContentProviderClient().query(req_uri, null,
+ ProviderTableMeta.FILE_PARENT + "=?",
+ new String[]{String.valueOf(parentId)}, null);
} catch (RemoteException e) {
Log_OC.e(TAG, e.getMessage());
return ret;
}
} else {
- c = getContentResolver().query(req_uri, null,
- ProviderTableMeta.FILE_PARENT + "=?" ,
- new String[] { String.valueOf(parentId)}, null);
+ c = getContentResolver().query(req_uri, null,
+ ProviderTableMeta.FILE_PARENT + "=?",
+ new String[]{String.valueOf(parentId)}, null);
}
if (c.moveToFirst()) {
do {
OCFile child = createFileInstance(c);
- // TODO Enable when "On Device" is recovered ?
- // if (child.isFolder() || !onlyOnDevice || onlyOnDevice && child.isDown()){
+ if (child.isFolder() || !onlyOnDevice || onlyOnDevice && child.isDown()){
ret.add(child);
- // }
+ }
} while (c.moveToNext());
}
return ret;
}
-
-
+
+
private OCFile createRootDir() {
OCFile file = new OCFile(OCFile.ROOT_PATH);
file.setMimetype("DIR");
cmp_key + "=? AND "
+ ProviderTableMeta.FILE_ACCOUNT_OWNER
+ "=?",
- new String[] { value, mAccount.name }, null);
+ new String[]{value, mAccount.name}, null);
} else {
try {
c = getContentProviderClient().query(
null,
cmp_key + "=? AND "
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
- new String[] { value, mAccount.name }, null);
+ new String[]{value, mAccount.name}, null);
} catch (RemoteException e) {
Log_OC.e(TAG,
"Couldn't determine file existance, assuming non existance: "
key + "=? AND "
+ ProviderTableMeta.FILE_ACCOUNT_OWNER
+ "=?",
- new String[] { value, mAccount.name }, null);
+ new String[]{value, mAccount.name}, null);
} else {
try {
c = getContentProviderClient().query(
ProviderTableMeta.CONTENT_URI,
null,
key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER
- + "=?", new String[] { value, mAccount.name },
+ + "=?", new String[]{value, mAccount.name},
null);
} catch (RemoteException e) {
Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
}
return c;
}
-
+
private OCFile createFileInstance(Cursor c) {
OCFile file = null;
file.setFavorite(c.getInt(
c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false);
file.setEtag(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_ETAG)));
- file.setShareByLink(c.getInt(
- c.getColumnIndex(ProviderTableMeta.FILE_SHARE_BY_LINK)) == 1 ? true : false);
+ file.setShareViaLink(c.getInt(
+ c.getColumnIndex(ProviderTableMeta.FILE_SHARED_VIA_LINK)) == 1 ? true : false);
+ file.setShareWithSharee(c.getInt(
+ c.getColumnIndex(ProviderTableMeta.FILE_SHARED_WITH_SHAREE)) == 1 ? true : false);
file.setPublicLink(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PUBLIC_LINK)));
file.setPermissions(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PERMISSIONS)));
file.setRemoteId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID)));
c.getColumnIndex(ProviderTableMeta.FILE_UPDATE_THUMBNAIL)) == 1 ? true : false);
file.setDownloading(c.getInt(
c.getColumnIndex(ProviderTableMeta.FILE_IS_DOWNLOADING)) == 1 ? true : false);
-
+ file.setEtagInConflict(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_ETAG_IN_CONFLICT)));
+
}
return file;
}
-
- /**
- * Returns if the file/folder is shared by link or not
- * @param path Path of the file/folder
- * @return
- */
- public boolean isShareByLink(String path) {
- Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
- OCFile file = null;
- if (c.moveToFirst()) {
- file = createFileInstance(c);
- }
- c.close();
- return file.isShareByLink();
- }
-
- /**
- * Returns the public link of the file/folder
- * @param path Path of the file/folder
- * @return
- */
- public String getPublicLink(String path) {
- Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
- OCFile file = null;
- if (c.moveToFirst()) {
- file = createFileInstance(c);
- }
- c.close();
- return file.getPublicLink();
- }
-
-
+
// Methods for Shares
public boolean saveShare(OCShare share) {
boolean overriden = false;
cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
cv.put(
- ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
- share.getSharedWithDisplayName()
+ ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
+ share.getSharedWithDisplayName()
);
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
- cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+ cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
-
- if (shareExists(share.getIdRemoteShared())) { // for renamed files
+ if (shareExists(share.getRemoteId())) {// for renamed files; no more delete and create
overriden = true;
if (getContentResolver() != null) {
getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv,
ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
- new String[] { String.valueOf(share.getIdRemoteShared()) });
+ new String[]{String.valueOf(share.getRemoteId())});
} else {
try {
getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_SHARE,
cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
- new String[] { String.valueOf(share.getIdRemoteShared()) });
+ new String[]{String.valueOf(share.getRemoteId())});
} catch (RemoteException e) {
Log_OC.e(TAG,
"Fail to insert insert file to database "
long new_id = Long.parseLong(result_uri.getPathSegments()
.get(1));
share.setId(new_id);
- }
+ }
}
return overriden;
}
- public OCShare getFirstShareByPathAndType(String path, ShareType type) {
+ /**
+ * Get first share bound to a file with a known path and given {@link ShareType}.
+ *
+ * @param path Path of the file.
+ * @param type Type of the share to get
+ * @param shareWith Target of the share. Ignored in type is {@link ShareType#PUBLIC_LINK}
+ * @return First {@OCShare} instance found in DB bound to the file in 'path'
+ */
+ public OCShare getFirstShareByPathAndType(String path, ShareType type, String shareWith) {
Cursor c = null;
+ if (shareWith == null) {
+ shareWith = "";
+ }
+
+ String selection = ProviderTableMeta.OCSHARES_PATH + "=? AND "
+ + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" ;
+ if (!ShareType.PUBLIC_LINK.equals(type)) {
+ selection += " AND " + ProviderTableMeta.OCSHARES_SHARE_WITH + "=?";
+ }
+
+ String [] selectionArgs;
+ if (ShareType.PUBLIC_LINK.equals(type)) {
+ selectionArgs = new String[]{
+ path,
+ Integer.toString(type.getValue()),
+ mAccount.name
+ };
+ } else {
+ selectionArgs = new String[]{
+ path,
+ Integer.toString(type.getValue()),
+ mAccount.name,
+ shareWith
+ };
+ }
+
if (getContentResolver() != null) {
c = getContentResolver().query(
ProviderTableMeta.CONTENT_URI_SHARE,
null,
- ProviderTableMeta.OCSHARES_PATH + "=? AND "
- + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
- + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
- new String[] { path, Integer.toString(type.getValue()), mAccount.name },
+ selection, selectionArgs,
null);
} else {
try {
c = getContentProviderClient().query(
ProviderTableMeta.CONTENT_URI_SHARE,
null,
- ProviderTableMeta.OCSHARES_PATH + "=? AND "
- + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
- + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
- new String[] { path, Integer.toString(type.getValue()), mAccount.name },
+ selection, selectionArgs,
null);
} catch (RemoteException e) {
c.close();
return share;
}
-
+
private OCShare createShareInstance(Cursor c) {
OCShare share = null;
if (c != null) {
.getColumnIndex(ProviderTableMeta.OCSHARES_ITEM_SOURCE)));
share.setShareType(ShareType.fromValue(c.getInt(c
.getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_TYPE))));
+ share.setShareWith(c.getString(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH)));
share.setPermissions(c.getInt(c
.getColumnIndex(ProviderTableMeta.OCSHARES_PERMISSIONS)));
share.setSharedDate(c.getLong(c
share.setSharedWithDisplayName(c.getString(c
.getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME)));
share.setIsFolder(c.getInt(
- c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1 ? true : false);
+ c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1);
share.setUserId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID)));
- share.setIdRemoteShared(
- c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED))
- );
-
+ share.setIdRemoteShared(c.getLong(
+ c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED)));
}
return share;
}
cmp_key + "=? AND "
+ ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
+ "=?",
- new String[] { value, mAccount.name }, null);
+ new String[]{value, mAccount.name}, null);
} else {
try {
c = getContentProviderClient().query(
null,
cmp_key + "=? AND "
+ ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
- new String[] { value, mAccount.name }, null);
+ new String[]{value, mAccount.name}, null);
} catch (RemoteException e) {
Log_OC.e(TAG,
"Couldn't determine file existance, assuming non existance: "
c.close();
return retval;
}
-
+
private boolean shareExists(long remoteId) {
return shareExists(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
}
- private void cleanSharedFiles() {
+ private void resetShareFlagsInAllFiles() {
ContentValues cv = new ContentValues();
- cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, false);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, false);
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?";
- String [] whereArgs = new String[]{mAccount.name};
-
+ String[] whereArgs = new String[]{mAccount.name};
+
if (getContentResolver() != null) {
getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
} else {
try {
- getContentProviderClient().update(
- ProviderTableMeta.CONTENT_URI, cv, where, whereArgs
- );
-
+ getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where,
+ whereArgs);
} catch (RemoteException e) {
- Log_OC.e(TAG, "Exception in cleanSharedFiles" + e.getMessage());
+ Log_OC.e(TAG, "Exception in resetShareFlagsInAllFiles" + e.getMessage());
}
}
}
- private void cleanSharedFilesInFolder(OCFile folder) {
+ private void resetShareFlagsInFolder(OCFile folder) {
ContentValues cv = new ContentValues();
- cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, false);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, false);
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
ProviderTableMeta.FILE_PARENT + "=?";
String [] whereArgs = new String[] { mAccount.name , String.valueOf(folder.getFileId()) };
-
+
if (getContentResolver() != null) {
getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
} else {
try {
- getContentProviderClient().update(
- ProviderTableMeta.CONTENT_URI, cv, where, whereArgs
- );
-
+ getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where,
+ whereArgs);
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in resetShareFlagsInFolder " + e.getMessage());
+ }
+ }
+ }
+
+ private void resetShareFlagInAFile(String filePath){
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, false);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, false);
+ cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH+ "=?";
+ String [] whereArgs = new String[] { mAccount.name , filePath };
+
+ if (getContentResolver() != null) {
+ getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
+
+ } else {
+ try {
+ getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where,
+ whereArgs);
} catch (RemoteException e) {
- Log_OC.e(TAG, "Exception in cleanSharedFilesInFolder " + e.getMessage());
+ Log_OC.e(TAG, "Exception in resetShareFlagsInFolder " + e.getMessage());
}
}
}
private void cleanShares() {
String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
- String [] whereArgs = new String[]{mAccount.name};
-
+ String[] whereArgs = new String[]{mAccount.name};
+
if (getContentResolver() != null) {
getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs);
} else {
try {
- getContentProviderClient().delete(
- ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs
- );
-
+ getContentProviderClient().delete(ProviderTableMeta.CONTENT_URI_SHARE, where,
+ whereArgs);
} catch (RemoteException e) {
Log_OC.e(TAG, "Exception in cleanShares" + e.getMessage());
}
}
}
-
+
public void saveShares(Collection<OCShare> shares) {
cleanShares();
if (shares != null) {
- ArrayList<ContentProviderOperation> operations =
+ ArrayList<ContentProviderOperation> operations =
new ArrayList<ContentProviderOperation>(shares.size());
// prepare operations to insert or update files to save in the given folder
cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
cv.put(
- ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
- share.getSharedWithDisplayName()
+ ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
+ share.getSharedWithDisplayName()
);
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
- cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+ cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
- if (shareExists(share.getIdRemoteShared())) {
+ if (shareExists(share.getRemoteId())) {
// updating an existing file
operations.add(
ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
- withValues(cv).
- withSelection(
- ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
- new String[] { String.valueOf(share.getIdRemoteShared()) }
- ).
- build()
- );
-
+ withValues(cv).
+ withSelection(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+ new String[]{String.valueOf(share.getRemoteId())})
+ .build());
} else {
// adding a new file
operations.add(
ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI_SHARE).
- withValues(cv).
- build()
+ withValues(cv).
+ build()
);
}
}
-
+
// apply operations in batch
if (operations.size() > 0) {
@SuppressWarnings("unused")
ContentProviderResult[] results = null;
- Log_OC.d(TAG, "Sending " + operations.size() +
+ Log_OC.d(TAG, "Sending " + operations.size() +
" operations to FileContentProvider");
try {
if (getContentResolver() != null) {
- results = getContentResolver().applyBatch(
- MainApp.getAuthority(), operations
- );
-
+ results = getContentResolver().applyBatch(MainApp.getAuthority(),
+ operations);
} else {
results = getContentProviderClient().applyBatch(operations);
}
-
+
} catch (OperationApplicationException e) {
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
-
+
} catch (RemoteException e) {
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
}
}
}
-
+
}
-
+
public void updateSharedFiles(Collection<OCFile> sharedFiles) {
- cleanSharedFiles();
-
+ resetShareFlagsInAllFiles();
+
if (sharedFiles != null) {
- ArrayList<ContentProviderOperation> operations =
+ ArrayList<ContentProviderOperation> operations =
new ArrayList<ContentProviderOperation>(sharedFiles.size());
// prepare operations to insert or update files to save in the given folder
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
cv.put(
- ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
- file.getModificationTimestampAtLastSyncForData()
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ file.getModificationTimestampAtLastSyncForData()
);
cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, file.getLastSyncDateForProperties());
cv.put(
- ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA,
- file.getLastSyncDateForData()
+ ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA,
+ file.getLastSyncDateForData()
);
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.isFavorite() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
- cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, file.isSharedViaLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, file.isSharedWithSharee() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
cv.put(
- ProviderTableMeta.FILE_UPDATE_THUMBNAIL,
- file.needsUpdateThumbnail() ? 1 : 0
+ ProviderTableMeta.FILE_UPDATE_THUMBNAIL,
+ file.needsUpdateThumbnail() ? 1 : 0
);
cv.put(
ProviderTableMeta.FILE_IS_DOWNLOADING,
file.isDownloading() ? 1 : 0
);
+ cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, file.getEtagInConflict());
boolean existsByPath = fileExists(file.getRemotePath());
if (existsByPath || fileExists(file.getFileId())) {
// updating an existing file
operations.add(
ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
- withValues(cv).
- withSelection(
- ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(file.getFileId()) }
- ).build()
- );
+ withValues(cv).
+ withSelection(ProviderTableMeta._ID + "=?",
+ new String[]{String.valueOf(file.getFileId())})
+ .build());
} else {
// adding a new file
operations.add(
ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).
- withValues(cv).
- build()
+ withValues(cv).
+ build()
);
}
}
-
+
// apply operations in batch
if (operations.size() > 0) {
@SuppressWarnings("unused")
ContentProviderResult[] results = null;
- Log_OC.d(TAG, "Sending " + operations.size() +
+ Log_OC.d(TAG, "Sending " + operations.size() +
" operations to FileContentProvider");
try {
if (getContentResolver() != null) {
- results = getContentResolver().applyBatch(
- MainApp.getAuthority(), operations
- );
-
+ results = getContentResolver().applyBatch(MainApp.getAuthority(), operations);
} else {
results = getContentProviderClient().applyBatch(operations);
}
-
+
} catch (OperationApplicationException e) {
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
-
+
} catch (RemoteException e) {
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
}
}
}
-
- }
-
- public void removeShare(OCShare share){
+
+ }
+
+ public void removeShare(OCShare share) {
Uri share_uri = ProviderTableMeta.CONTENT_URI_SHARE;
- String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" + " AND " +
- ProviderTableMeta.FILE_PATH + "=?";
- String [] whereArgs = new String[]{mAccount.name, share.getPath()};
+ String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" + " AND " +
+ ProviderTableMeta._ID + "=?";
+ String [] whereArgs = new String[]{mAccount.name, Long.toString(share.getId())};
if (getContentProviderClient() != null) {
try {
getContentProviderClient().delete(share_uri, where, whereArgs);
e.printStackTrace();
}
} else {
- getContentResolver().delete(share_uri, where, whereArgs);
+ getContentResolver().delete(share_uri, where, whereArgs);
}
}
-
+
public void saveSharesDB(ArrayList<OCShare> shares) {
- saveShares(shares);
-
- ArrayList<OCFile> sharedFiles = new ArrayList<OCFile>();
-
- for (OCShare share : shares) {
- // Get the path
- String path = share.getPath();
- if (share.isFolder()) {
- path = path + FileUtils.PATH_SEPARATOR;
- }
-
- // Update OCFile with data from share: ShareByLink and publicLink
- OCFile file = getFileByPath(path);
- if (file != null) {
- if (share.getShareType().equals(ShareType.PUBLIC_LINK)) {
- file.setShareByLink(true);
- sharedFiles.add(file);
+ ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
+
+ // Reset flags & Remove shares for this files
+ String filePath = "";
+ for (OCShare share: shares) {
+ if (filePath != share.getPath()){
+ filePath = share.getPath();
+ resetShareFlagInAFile(filePath);
+ operations = prepareRemoveSharesInFile(filePath, operations);
+ }
+ }
+
+ // Add operations to insert shares
+ operations = prepareInsertShares(shares, operations);
+
+ // apply operations in batch
+ if (operations.size() > 0) {
+ Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
+ try {
+ if (getContentResolver() != null) {
+ getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ getContentProviderClient().applyBatch(operations);
}
- }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ }
}
-
- updateSharedFiles(sharedFiles);
+
+// // TODO: review if it is needed
+// // Update shared files
+// ArrayList<OCFile> sharedFiles = new ArrayList<OCFile>();
+//
+// for (OCShare share : shares) {
+// // Get the path
+// String path = share.getPath();
+// if (share.isFolder()) {
+// path = path + FileUtils.PATH_SEPARATOR;
+// }
+//
+// // Update OCFile with data from share: ShareByLink, publicLink and
+// OCFile file = getFileByPath(path);
+// if (file != null) {
+// if (share.getShareType().equals(ShareType.PUBLIC_LINK)) {
+// file.setShareViaLink(true);
+// sharedFiles.add(file);
+// }
+// }
+// }
+//
+// // TODO: Review
+// updateSharedFiles(sharedFiles);
}
-
+ public void removeSharesForFile(String remotePath) {
+ resetShareFlagInAFile(remotePath);
+ ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
+ operations = prepareRemoveSharesInFile(remotePath, operations);
+ // apply operations in batch
+ if (operations.size() > 0) {
+ Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
+ try {
+ if (getContentResolver() != null) {
+ getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ }
+ }
+ }
+
+
public void saveSharesInFolder(ArrayList<OCShare> shares, OCFile folder) {
- cleanSharedFilesInFolder(folder);
+ resetShareFlagsInFolder(folder);
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
operations = prepareRemoveSharesInFolder(folder, operations);
-
+
+ if (shares != null) {
+ // prepare operations to insert or update files to save in the given folder
+ operations = prepareInsertShares(shares, operations);
+ }
+
+ // apply operations in batch
+ if (operations.size() > 0) {
+ Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
+ try {
+ if (getContentResolver() != null) {
+ getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+
+ }
+ }
+
+ }
+
+ /**
+ * Prepare operations to insert or update files to save in the given folder
+ * @param shares List of shares to insert
+ * @param operations List of operations
+ * @return
+ */
+ private ArrayList<ContentProviderOperation> prepareInsertShares(
+ ArrayList<OCShare> shares, ArrayList<ContentProviderOperation> operations) {
+
if (shares != null) {
// prepare operations to insert or update files to save in the given folder
for (OCShare share : shares) {
cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
cv.put(
- ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
- share.getSharedWithDisplayName()
+ ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
+ share.getSharedWithDisplayName()
);
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
- cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+ cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
- /*
- if (shareExists(share.getIdRemoteShared())) {
- // updating an existing share resource
- operations.add(
- ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
- withValues(cv).
- withSelection( ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
- new String[] { String.valueOf(share.getIdRemoteShared()) })
- .build());
-
- } else {
- */
// adding a new share resource
operations.add(
ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI_SHARE).
- withValues(cv).
- build()
+ withValues(cv).
+ build()
);
- //}
- }
- }
-
- // apply operations in batch
- if (operations.size() > 0) {
- @SuppressWarnings("unused")
- ContentProviderResult[] results = null;
- Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
- try {
- if (getContentResolver() != null) {
- results = getContentResolver().applyBatch(MainApp.getAuthority(), operations);
-
- } else {
- results = getContentProviderClient().applyBatch(operations);
- }
-
- } catch (OperationApplicationException e) {
- Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
-
- } catch (RemoteException e) {
- Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
}
}
- //}
-
+ return operations;
}
private ArrayList<ContentProviderOperation> prepareRemoveSharesInFolder(
OCFile folder, ArrayList<ContentProviderOperation> preparedOperations) {
if (folder != null) {
- String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND "
+ String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND "
+ ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
String [] whereArgs = new String[]{ "", mAccount.name };
- // TODO Enable when "On Device" is recovered ?
- Vector<OCFile> files = getFolderContent(folder /*, false*/);
+ Vector<OCFile> files = getFolderContent(folder, false);
for (OCFile file : files) {
whereArgs[0] = file.getRemotePath();
preparedOperations.add(
ContentProviderOperation.newDelete(ProviderTableMeta.CONTENT_URI_SHARE).
- withSelection(where, whereArgs).
- build()
+ withSelection(where, whereArgs).
+ build()
);
}
}
return preparedOperations;
-
- /*
- if (operations.size() > 0) {
- try {
- if (getContentResolver() != null) {
- getContentResolver().applyBatch(MainApp.getAuthority(), operations);
- } else {
- getContentProviderClient().applyBatch(operations);
- }
+ }
- } catch (OperationApplicationException e) {
- Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ private ArrayList<ContentProviderOperation> prepareRemoveSharesInFile(
+ String filePath, ArrayList<ContentProviderOperation> preparedOperations) {
+
+ String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
+ String[] whereArgs = new String[]{filePath, mAccount.name};
+
+ preparedOperations.add(
+ ContentProviderOperation.newDelete(ProviderTableMeta.CONTENT_URI_SHARE).
+ withSelection(where, whereArgs).
+ build()
+ );
+
+ return preparedOperations;
+
+ }
+
+ public ArrayList<OCShare> getSharesWithForAFile(String filePath, String accountName){
+ // Condition
+ String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?"+ "AND"
+ + " (" + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? OR "
+ + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? ) ";
+ String [] whereArgs = new String[]{ filePath, accountName ,
+ Integer.toString(ShareType.USER.getValue()),
+ Integer.toString(ShareType.GROUP.getValue()) };
+
+ Cursor c = null;
+ if (getContentResolver() != null) {
+ c = getContentResolver().query(
+ ProviderTableMeta.CONTENT_URI_SHARE,
+ null, where, whereArgs, null);
+ } else {
+ try {
+ c = getContentProviderClient().query(
+ ProviderTableMeta.CONTENT_URI_SHARE,
+ null, where, whereArgs, null);
} catch (RemoteException e) {
- Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ Log_OC.e(TAG, "Could not get list of shares with: " + e.getMessage());
+ c = null;
}
- }
- */
-
- /*
- if (getContentResolver() != null) {
-
- getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE,
- where,
- whereArgs);
- } else {
- try {
- getContentProviderClient().delete( ProviderTableMeta.CONTENT_URI_SHARE,
- where,
- whereArgs);
+ }
+ ArrayList<OCShare> shares = new ArrayList<OCShare>();
+ OCShare share = null;
+ if (c.moveToFirst()) {
+ do {
+ share = createShareInstance(c);
+ shares.add(share);
+ // }
+ } while (c.moveToNext());
+ }
+ c.close();
- } catch (RemoteException e) {
- Log_OC.e(TAG, "Exception deleting shares in a folder " + e.getMessage());
- }
- }
- */
- //}
+ return shares;
}
- public void triggerMediaScan(String path) {
- Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
- intent.setData(Uri.fromFile(new File(path)));
- MainApp.getAppContext().sendBroadcast(intent);
+ public static void triggerMediaScan(String path) {
+ if (path != null) {
+ Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
+ intent.setData(Uri.fromFile(new File(path)));
+ MainApp.getAppContext().sendBroadcast(intent);
+ }
}
public void deleteFileInMediaScan(String path) {
}
+ public void saveConflict(OCFile file, String etagInConflict) {
+ if (!file.isDown()) {
+ etagInConflict = null;
+ }
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, etagInConflict);
+ int updated = 0;
+ if (getContentResolver() != null) {
+ updated = getContentResolver().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(file.getFileId())}
+ );
+ } else {
+ try {
+ updated = getContentProviderClient().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ ProviderTableMeta._ID + "=?",
+ new String[]{String.valueOf(file.getFileId())}
+ );
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Failed saving conflict in database " + e.getMessage());
+ }
+ }
+
+ Log_OC.d(TAG, "Number of files updated with CONFLICT: " + updated);
+
+ if (updated > 0) {
+ if (etagInConflict != null) {
+ /// set conflict in all ancestor folders
+
+ long parentId = file.getParentId();
+ Set<String> ancestorIds = new HashSet<String>();
+ while (parentId != FileDataStorageManager.ROOT_PARENT_ID) {
+ ancestorIds.add(Long.toString(parentId));
+ parentId = getFileById(parentId).getParentId();
+ }
+
+ if (ancestorIds.size() > 0) {
+ StringBuffer whereBuffer = new StringBuffer();
+ whereBuffer.append(ProviderTableMeta._ID).append(" IN (");
+ for (int i = 0; i < ancestorIds.size() - 1; i++) {
+ whereBuffer.append("?,");
+ }
+ whereBuffer.append("?");
+ whereBuffer.append(")");
+
+ if (getContentResolver() != null) {
+ updated = getContentResolver().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ whereBuffer.toString(),
+ ancestorIds.toArray(new String[]{})
+ );
+ } else {
+ try {
+ updated = getContentProviderClient().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ whereBuffer.toString(),
+ ancestorIds.toArray(new String[]{})
+ );
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Failed saving conflict in database " + e.getMessage());
+ }
+ }
+ } // else file is ROOT folder, no parent to set in conflict
+
+ } else {
+ /// update conflict in ancestor folders
+ // (not directly unset; maybe there are more conflicts below them)
+ String parentPath = file.getRemotePath();
+ if (parentPath.endsWith(OCFile.PATH_SEPARATOR)) {
+ parentPath = parentPath.substring(0, parentPath.length() - 1);
+ }
+ parentPath = parentPath.substring(0, parentPath.lastIndexOf(OCFile.PATH_SEPARATOR) + 1);
+
+ Log_OC.d(TAG, "checking parents to remove conflict; STARTING with " + parentPath);
+ while (parentPath.length() > 0) {
+
+ String where =
+ ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " IS NOT NULL AND " +
+ ProviderTableMeta.FILE_CONTENT_TYPE + " != 'DIR' AND " +
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + " = ? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ?";
+ Cursor descendentsInConflict = getContentResolver().query(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ new String[]{ProviderTableMeta._ID},
+ where,
+ new String[]{mAccount.name, parentPath + "%"},
+ null
+ );
+ if (descendentsInConflict == null || descendentsInConflict.getCount() == 0) {
+ Log_OC.d(TAG, "NO MORE conflicts in " + parentPath);
+ if (getContentResolver() != null) {
+ updated = getContentResolver().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + "=?",
+ new String[]{mAccount.name, parentPath}
+ );
+ } else {
+ try {
+ updated = getContentProviderClient().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + "=?"
+ , new String[]{mAccount.name, parentPath}
+ );
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Failed saving conflict in database " + e.getMessage());
+ }
+ }
+
+ } else {
+ Log_OC.d(TAG, "STILL " + descendentsInConflict.getCount() + " in " + parentPath);
+ }
+
+ if (descendentsInConflict != null) {
+ descendentsInConflict.close();
+ }
+
+ parentPath = parentPath.substring(0, parentPath.length() - 1); // trim last /
+ parentPath = parentPath.substring(0, parentPath.lastIndexOf(OCFile.PATH_SEPARATOR) + 1);
+ Log_OC.d(TAG, "checking parents to remove conflict; NEXT " + parentPath);
+ }
+ }
+ }
+
+ }
+
+ public OCCapability saveCapabilities(OCCapability capability){
+
+ // Prepare capabilities data
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME, mAccount.name);
+ cv.put(ProviderTableMeta.CAPABILITIES_VERSION_MAYOR, capability.getVersionMayor());
+ cv.put(ProviderTableMeta.CAPABILITIES_VERSION_MINOR, capability.getVersionMinor());
+ cv.put(ProviderTableMeta.CAPABILITIES_VERSION_MICRO, capability.getVersionMicro());
+ cv.put(ProviderTableMeta.CAPABILITIES_VERSION_STRING, capability.getVersionString());
+ cv.put(ProviderTableMeta.CAPABILITIES_VERSION_EDITION, capability.getVersionEdition());
+ cv.put(ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL, capability.getCorePollinterval());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED, capability.getFilesSharingApiEnabled().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED,
+ capability.getFilesSharingPublicEnabled().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED,
+ capability.getFilesSharingPublicPasswordEnforced().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED,
+ capability.getFilesSharingPublicExpireDateEnabled().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS,
+ capability.getFilesSharingPublicExpireDateDays());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED,
+ capability.getFilesSharingPublicExpireDateEnforced().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL,
+ capability.getFilesSharingPublicSendMail().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD,
+ capability.getFilesSharingPublicUpload().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL,
+ capability.getFilesSharingUserSendMail().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_RESHARING, capability.getFilesSharingResharing().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING,
+ capability.getFilesSharingFederationOutgoing().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING,
+ capability.getFilesSharingFederationIncoming().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING, capability.getFilesBigFileChuncking().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_FILES_UNDELETE, capability.getFilesUndelete().getValue());
+ cv.put(ProviderTableMeta.CAPABILITIES_FILES_VERSIONING, capability.getFilesVersioning().getValue());
+
+ if (capabilityExists(mAccount.name)) {
+ if (getContentResolver() != null) {
+ getContentResolver().update(ProviderTableMeta.CONTENT_URI_CAPABILITIES, cv,
+ ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=?",
+ new String[]{mAccount.name});
+ } else {
+ try {
+ getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_CAPABILITIES,
+ cv, ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=?",
+ new String[]{mAccount.name});
+ } catch (RemoteException e) {
+ Log_OC.e(TAG,
+ "Fail to insert insert file to database "
+ + e.getMessage());
+ }
+ }
+ } else {
+ Uri result_uri = null;
+ if (getContentResolver() != null) {
+ result_uri = getContentResolver().insert(
+ ProviderTableMeta.CONTENT_URI_CAPABILITIES, cv);
+ } else {
+ try {
+ result_uri = getContentProviderClient().insert(
+ ProviderTableMeta.CONTENT_URI_CAPABILITIES, cv);
+ } catch (RemoteException e) {
+ Log_OC.e(TAG,
+ "Fail to insert insert capability to database "
+ + e.getMessage());
+ }
+ }
+ if (result_uri != null) {
+ long new_id = Long.parseLong(result_uri.getPathSegments()
+ .get(1));
+ capability.setId(new_id);
+ capability.setAccountName(mAccount.name);
+ }
+ }
+
+ return capability;
+ }
+
+ private boolean capabilityExists(String accountName) {
+ Cursor c = getCapabilityCursorForAccount(accountName);
+ boolean exists = false;
+ if (c != null) {
+ exists = c.moveToFirst();
+ c.close();
+ }
+ return exists;
+ }
+
+ private Cursor getCapabilityCursorForAccount(String accountName){
+ Cursor c = null;
+ if (getContentResolver() != null) {
+ c = getContentResolver()
+ .query(ProviderTableMeta.CONTENT_URI_CAPABILITIES,
+ null,
+ ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=? ",
+ new String[]{accountName}, null);
+ } else {
+ try {
+ c = getContentProviderClient().query(
+ ProviderTableMeta.CONTENT_URI_CAPABILITIES,
+ null,
+ ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=? ",
+ new String[]{accountName}, null);
+ } catch (RemoteException e) {
+ Log_OC.e(TAG,
+ "Couldn't determine capability existance, assuming non existance: "
+ + e.getMessage());
+ }
+ }
+
+ return c;
+
+ }
+ public OCCapability getCapability(String accountName){
+ OCCapability capability = null;
+ Cursor c = getCapabilityCursorForAccount(accountName);
+
+ if (c.moveToFirst()) {
+ capability = createCapabilityInstance(c);
+ } else {
+ capability = new OCCapability(); // return default with all UNKNOWN
+ }
+ c.close();
+ return capability;
+ }
+
+ private OCCapability createCapabilityInstance(Cursor c) {
+ OCCapability capability = null;
+ if (c != null) {
+ capability = new OCCapability();
+ capability.setId(c.getLong(c.getColumnIndex(ProviderTableMeta._ID)));
+ capability.setAccountName(c.getString(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME)));
+ capability.setVersionMayor(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_MAYOR)));
+ capability.setVersionMinor(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_MINOR)));
+ capability.setVersionMicro(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_MICRO)));
+ capability.setVersionString(c.getString(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_STRING)));
+ capability.setVersionEdition(c.getString(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_EDITION)));
+ capability.setCorePollinterval(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL)));
+ capability.setFilesSharingApiEnabled(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED))));
+ capability.setFilesSharingPublicEnabled(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED))));
+ capability.setFilesSharingPublicPasswordEnforced(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED))));
+ capability.setFilesSharingPublicExpireDateEnabled(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED))));
+ capability.setFilesSharingPublicExpireDateDays(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS)));
+ capability.setFilesSharingPublicExpireDateEnforced(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED))));
+ capability.setFilesSharingPublicSendMail(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL))));
+ capability.setFilesSharingPublicUpload(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD))));
+ capability.setFilesSharingUserSendMail(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL))));
+ capability.setFilesSharingResharing(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_RESHARING))));
+ capability.setFilesSharingFederationOutgoing(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING))));
+ capability.setFilesSharingFederationIncoming(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING))));
+ capability.setFilesBigFileChuncking(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING))));
+ capability.setFilesUndelete(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_FILES_UNDELETE))));
+ capability.setFilesVersioning(CapabilityBooleanType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.CAPABILITIES_FILES_VERSIONING))));
+
+ }
+ return capability;
+ }
}
/**
* ownCloud Android client application
*
+ * @author Bartek Przybylski
+ * @author David A. Velasco
* Copyright (C) 2012 Bartek Przybylski
* Copyright (C) 2015 ownCloud Inc.
*
package com.owncloud.android.datamodel;
+import android.content.ContentResolver;
+import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
+import android.webkit.MimeTypeMap;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.utils.FileStorageUtils;
import java.io.File;
import third_parties.daveKoeller.AlphanumComparator;
public class OCFile implements Parcelable, Comparable<OCFile> {
- public static final Parcelable.Creator<OCFile> CREATOR = new Parcelable.Creator<OCFile>() {
- @Override
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public OCFile createFromParcel(Parcel source) {
return new OCFile(source);
}
- @Override
public OCFile[] newArray(int size) {
return new OCFile[size];
}
};
+ private final static String PERMISSION_SHARED_WITH_ME = "S"; // TODO move to better location
+
public static final String PATH_SEPARATOR = "/";
public static final String ROOT_PATH = PATH_SEPARATOR;
private boolean mIsDownloading;
+ private boolean mShowGridView;
+
+ private String mEtagInConflict; // Save file etag in the server, when there is a conflict. No conflict = null
+
+ private boolean mShareWithSharee;
+
+ /**
+ * URI to the local path of the file contents, if stored in the device; cached after first call
+ * to {@link #getStorageUri()}
+ */
+ private Uri mLocalUri;
+
/**
* Create new {@link OCFile} with given path.
mPublicLink = source.readString();
mPermissions = source.readString();
mRemoteId = source.readString();
- mNeedsUpdateThumbnail = source.readInt() == 0;
- mIsDownloading = source.readInt() == 0;
+ mNeedsUpdateThumbnail = source.readInt() == 1;
+ mIsDownloading = source.readInt() == 1;
+ mEtagInConflict = source.readString();
+ mShareWithSharee = source.readInt() == 1;
}
dest.writeString(mRemoteId);
dest.writeInt(mNeedsUpdateThumbnail ? 1 : 0);
dest.writeInt(mIsDownloading ? 1 : 0);
+ dest.writeString(mEtagInConflict);
+ dest.writeInt(mShareWithSharee ? 1 : 0);
}
/**
}
/**
+ * The URI to the file contents, if stored locally
+ *
+ * @return A URI to the local copy of the file, or NULL if not stored in the device
+ */
+ public Uri getStorageUri() {
+ if (mLocalPath == null || mLocalPath.length() == 0) {
+ return null;
+ }
+ if (mLocalUri == null) {
+ Uri.Builder builder = new Uri.Builder();
+ builder.scheme(ContentResolver.SCHEME_FILE);
+ builder.path(mLocalPath);
+ mLocalUri = builder.build();
+ }
+ return mLocalUri;
+ }
+
+ /**
* Can be used to set the path where the file is stored
*
* @param storage_path to set
*/
public void setStoragePath(String storage_path) {
mLocalPath = storage_path;
+ mLocalUri = null;
}
/**
/**
* Sets the name of the file
* <p/>
- * Does nothing if the new name is null, empty or includes "/" ; or if the file is the root directory
+ * Does nothing if the new name is null, empty or includes "/" ; or if the file is the root
+ * directory
*/
public void setFileName(String name) {
Log_OC.d(TAG, "OCFile name changin from " + mRemotePath);
- if (name != null && name.length() > 0 && !name.contains(PATH_SEPARATOR) && !mRemotePath.equals(ROOT_PATH)) {
+ if (name != null && name.length() > 0 && !name.contains(PATH_SEPARATOR) &&
+ !mRemotePath.equals(ROOT_PATH)) {
String parent = (new File(getRemotePath())).getParent();
parent = (parent.endsWith(PATH_SEPARATOR)) ? parent : parent + PATH_SEPARATOR;
mRemotePath = parent + name;
}
/**
- * Adds a file to this directory. If this file is not a directory, an
- * exception gets thrown.
- *
- * @param file to add
- * @throws IllegalStateException if you try to add a something and this is
- * not a directory
- */
- public void addFile(OCFile file) throws IllegalStateException {
- if (isFolder()) {
- file.mParentId = mId;
- mNeedsUpdating = true;
- return;
- }
- throw new IllegalStateException(
- "This is not a directory where you can add stuff to!");
- }
-
- /**
* Used internally. Reset all file properties
*/
private void resetData() {
mRemoteId = null;
mNeedsUpdateThumbnail = false;
mIsDownloading = false;
+ mEtagInConflict = null;
+ mShareWithSharee = false;
}
/**
@Override
public int describeContents() {
- return ((Object) this).hashCode();
+ return super.hashCode();
}
@Override
@Override
public String toString() {
- String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s, parentId=%s, favorite=%s etag=%s]";
- asString = String.format(asString, Long.valueOf(mId), getFileName(), mMimeType, isDown(), mLocalPath, mRemotePath, Long.valueOf(mParentId), Boolean.valueOf(mFavorite), mEtag);
+ String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s, " +
+ "parentId=%s, favorite=%s etag=%s]";
+ asString = String.format(asString, Long.valueOf(mId), getFileName(), mMimeType, isDown(),
+ mLocalPath, mRemotePath, Long.valueOf(mParentId), Boolean.valueOf(mFavorite),
+ mEtag);
return asString;
}
}
public void setEtag(String etag) {
- this.mEtag = etag;
+ this.mEtag = (etag != null ? etag : "");
}
- public boolean isShareByLink() {
+ public boolean isSharedViaLink() {
return mShareByLink;
}
- public void setShareByLink(boolean shareByLink) {
+ public void setShareViaLink(boolean shareByLink) {
this.mShareByLink = shareByLink;
}
*/
public boolean isImage() {
return ((mMimeType != null && mMimeType.startsWith("image/")) ||
- FileStorageUtils.getMimeTypeFromName(mRemotePath).startsWith("image/"));
+ getMimeTypeFromName().startsWith("image/"));
+ }
+
+ /**
+ * @return 'True' if the file is simple text (e.g. not application-dependent, like .doc or .docx)
+ */
+ public boolean isText() {
+ return ((mMimeType != null && mMimeType.startsWith("text/")) ||
+ getMimeTypeFromName().startsWith("text/"));
+ }
+
+ public String getMimeTypeFromName() {
+ String extension = "";
+ int pos = mRemotePath.lastIndexOf('.');
+ if (pos >= 0) {
+ extension = mRemotePath.substring(pos + 1);
+ }
+ String result = MimeTypeMap.getSingleton().
+ getMimeTypeFromExtension(extension.toLowerCase());
+ return (result != null) ? result : "";
+ }
+
+ /**
+ * @return 'True' if the file is hidden
+ */
+ public boolean isHidden() {
+ return getFileName().startsWith(".");
}
public String getPermissions() {
this.mIsDownloading = isDownloading;
}
- public boolean isSynchronizing() {
- // TODO real implementation
- return false;
+ public String getEtagInConflict() {
+ return mEtagInConflict;
+ }
+
+ public void setEtagInConflict(String etagInConflict) {
+ mEtagInConflict = etagInConflict;
+ }
+
+ public boolean isSharedWithSharee() {
+ return mShareWithSharee;
+ }
+
+ public void setShareWithSharee(boolean shareWithSharee) {
+ this.mShareWithSharee = shareWithSharee;
+ }
+
+ public boolean isSharedWithMe() {
+ String permissions = getPermissions();
+ return (permissions != null && permissions.contains(PERMISSION_SHARED_WITH_ME));
}
}
import org.apache.commons.httpclient.methods.GetMethod;
import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.Context;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
+import android.graphics.Point;
+import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.AsyncTask;
+import android.preference.PreferenceManager;
+import android.view.Display;
+import android.view.View;
+import android.view.WindowManager;
import android.widget.ImageView;
+import android.widget.ProgressBar;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
private static final String TAG = ThumbnailsCacheManager.class.getSimpleName();
private static final String CACHE_FOLDER = "thumbnailCache";
+ private static final Integer CACHE_SIZE_MB = 10;
private static final Object mThumbnailsDiskCacheLock = new Object();
private static DiskLruImageCache mThumbnailCache = null;
private static boolean mThumbnailCacheStarting = true;
- private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB
private static final CompressFormat mCompressFormat = CompressFormat.JPEG;
private static final int mCompressQuality = 70;
private static OwnCloudClient mClient = null;
public static Bitmap mDefaultImg =
BitmapFactory.decodeResource(
- MainApp.getAppContext().getResources(),
- DisplayUtils.getFileTypeIconId("image/png", "default.png")
+ MainApp.getAppContext().getResources(),
+ R.drawable.file_image
);
if (mThumbnailCache == null) {
try {
+ SharedPreferences appPrefs =
+ PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
+ // due to backward compatibility
+ Integer cacheSize = CACHE_SIZE_MB * 1024 * 1024;
+ try {
+ cacheSize = appPrefs.getInt("pref_cache_size", cacheSize);
+ } catch (ClassCastException e) {
+ String temp = appPrefs.getString("pref_cache_size",
+ cacheSize.toString());
+ cacheSize = Integer.decode(temp) * 1024 * 1024;
+ }
+
// Check if media is mounted or storage is built-in, if so,
// try and use external cache dir; otherwise use internal cache dir
final String cachePath =
final File diskCacheDir = new File(cachePath);
mThumbnailCache = new DiskLruImageCache(
diskCacheDir,
- DISK_CACHE_SIZE,
+ cacheSize,
mCompressFormat,
mCompressQuality
);
return null;
}
+ /**
+ * Sets max size of cache
+ * @param maxSize in MB
+ * @return
+ */
+ public static boolean setMaxSize(long maxSize){
+ if (mThumbnailCache != null){
+ mThumbnailCache.setMaxSize(maxSize * 1024 * 1024);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Shows max cache size
+ * @return max cache size in MB.
+ */
+ public static long getMaxSize(){
+ if (mThumbnailCache == null) {
+ new ThumbnailsCacheManager.InitDiskCacheTask().execute();
+ }
+ return mThumbnailCache.getMaxSize() / 1024 / 1024;
+ }
+
public static class ThumbnailGenerationTask extends AsyncTask<Object, Void, Bitmap> {
private final WeakReference<ImageView> mImageViewReference;
+ private WeakReference<ProgressBar> mProgressWheelRef;
private static Account mAccount;
private Object mFile;
+ private Boolean mIsThumbnail;
private FileDataStorageManager mStorageManager;
-
public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager,
Account account) {
// Use a WeakReference to ensure the ImageView can be garbage collected
mAccount = account;
}
+ public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager,
+ Account account, ProgressBar progressWheel) {
+ this(imageView, storageManager, account);
+ mProgressWheelRef = new WeakReference<ProgressBar>(progressWheel);
+ }
+
public ThumbnailGenerationTask(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
mImageViewReference = new WeakReference<ImageView>(imageView);
}
mFile = params[0];
+ mIsThumbnail = (Boolean) params[1];
+
if (mFile instanceof OCFile) {
- thumbnail = doOCFileInBackground();
+ thumbnail = doOCFileInBackground(mIsThumbnail);
if (((OCFile) mFile).isVideo() && thumbnail != null){
thumbnail = addVideoOverlay(thumbnail);
}
} else if (mFile instanceof File) {
- thumbnail = doFileInBackground();
+ thumbnail = doFileInBackground(mIsThumbnail);
String url = ((File) mFile).getAbsolutePath();
String mMimeType = FileStorageUtils.getMimeTypeFromName(url);
}
protected void onPostExecute(Bitmap bitmap){
- if (isCancelled()) {
- bitmap = null;
- }
-
if (bitmap != null) {
final ImageView imageView = mImageViewReference.get();
final ThumbnailGenerationTask bitmapWorkerTask = getBitmapWorkerTask(imageView);
tagId = String.valueOf(mFile.hashCode());
}
if (String.valueOf(imageView.getTag()).equals(tagId)) {
+ if (mProgressWheelRef != null) {
+ final ProgressBar progressWheel = mProgressWheelRef.get();
+ if (progressWheel != null) {
+ progressWheel.setVisibility(View.GONE);
+ }
+ }
imageView.setImageBitmap(bitmap);
+ // imageView.setVisibility(View.VISIBLE);
}
}
}
* @param imageKey: thumb key
* @param bitmap: image for extracting thumbnail
* @param path: image path
- * @param px: thumbnail dp
+ * @param pxW: thumbnail width
+ * @param pxH: thumbnail height
* @return Bitmap
*/
- private Bitmap addThumbnailToCache(String imageKey, Bitmap bitmap, String path, int px){
+ private Bitmap addThumbnailToCache(String imageKey, Bitmap bitmap, String path, int pxW, int pxH){
- Bitmap thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
+ Bitmap thumbnail = ThumbnailUtils.extractThumbnail(bitmap, pxW, pxH);
// Rotate image, obeying exif tag
thumbnail = BitmapUtils.rotateImage(thumbnail,path);
return Math.round(r.getDimension(R.dimen.file_icon_size_grid));
}
- private Bitmap doOCFileInBackground() {
+ private Point getScreenDimension(){
+ WindowManager wm = (WindowManager) MainApp.getAppContext().getSystemService(Context.WINDOW_SERVICE);
+ Display display = wm.getDefaultDisplay();
+ Point test = new Point();
+ display.getSize(test);
+ return test;
+ }
+
+ private Bitmap doOCFileInBackground(Boolean isThumbnail) {
+ Bitmap thumbnail = null;
OCFile file = (OCFile)mFile;
- final String imageKey = String.valueOf(file.getRemoteId());
+ // distinguish between thumbnail and resized image
+ String temp = String.valueOf(file.getRemoteId());
+ if (isThumbnail){
+ temp = "t" + temp;
+ } else {
+ temp = "r" + temp;
+ }
+
+ final String imageKey = temp;
// Check disk cache in background thread
- Bitmap thumbnail = getBitmapFromDiskCache(imageKey);
+ thumbnail = getBitmapFromDiskCache(imageKey);
// Not found in disk cache
if (thumbnail == null || file.needsUpdateThumbnail()) {
-
- int px = getThumbnailDimension();
+ int pxW = 0;
+ int pxH = 0;
+ if (mIsThumbnail) {
+ pxW = pxH = getThumbnailDimension();
+ } else {
+ Point p = getScreenDimension();
+ pxW = p.x;
+ pxH = p.y;
+ }
if (file.isDown()) {
- Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(
- file.getStoragePath(), px, px);
+ Bitmap tempBitmap = BitmapUtils.decodeSampledBitmapFromFile(
+ file.getStoragePath(), pxW, pxH);
+ Bitmap bitmap = ThumbnailUtils.extractThumbnail(tempBitmap, pxW, pxH);
if (bitmap != null) {
- thumbnail = addThumbnailToCache(imageKey, bitmap, file.getStoragePath(), px);
+ // Handle PNG
+ if (file.getMimetype().equalsIgnoreCase("image/png")) {
+ bitmap = handlePNG(bitmap, pxW);
+ }
+
+ thumbnail = addThumbnailToCache(imageKey, bitmap,
+ file.getStoragePath(), pxW, pxH);
file.setNeedsUpdateThumbnail(false);
mStorageManager.saveFile(file);
if (mClient != null && serverOCVersion != null) {
if (serverOCVersion.supportsRemoteThumbnails()) {
try {
- String uri = mClient.getBaseUri() + "" +
- "/index.php/apps/files/api/v1/thumbnail/" +
- px + "/" + px + Uri.encode(file.getRemotePath(), "/");
- Log_OC.d("Thumbnail", "URI: " + uri);
- GetMethod get = new GetMethod(uri);
- int status = mClient.executeMethod(get);
- if (status == HttpStatus.SC_OK) {
-// byte[] bytes = get.getResponseBody();
-// Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
-// bytes.length);
- InputStream inputStream = get.getResponseBodyAsStream();
- Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
- thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
-
- // Add thumbnail to cache
- if (thumbnail != null) {
- addBitmapToCache(imageKey, thumbnail);
+ if (mIsThumbnail) {
+ String uri = mClient.getBaseUri() + "" +
+ "/index.php/apps/files/api/v1/thumbnail/" +
+ pxW + "/" + pxH + Uri.encode(file.getRemotePath(), "/");
+ Log_OC.d("Thumbnail", "Download URI: " + uri);
+ GetMethod get = new GetMethod(uri);
+ int status = mClient.executeMethod(get);
+ if (status == HttpStatus.SC_OK) {
+ InputStream inputStream = get.getResponseBodyAsStream();
+ Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
+ thumbnail = ThumbnailUtils.extractThumbnail(bitmap, pxW, pxH);
+ } else {
+ Log_OC.d(TAG, "Status: " + status);
+ }
+ } else {
+ String gallery = "";
+ if (serverOCVersion.supportsNativeGallery()){
+ gallery = "gallery";
+ } else {
+ gallery = "galleryplus";
+ }
+
+ String uri = mClient.getBaseUri() +
+ "/index.php/apps/" + gallery + "/api/preview/" + Integer.parseInt(file.getRemoteId().substring(0,8)) +
+ "/" + pxW + "/" + pxH;
+ Log_OC.d("Thumbnail", "FileName: " + file.getFileName() + " Download URI: " + uri);
+ GetMethod get = new GetMethod(uri);
+ int status = mClient.executeMethod(get);
+ if (status == HttpStatus.SC_OK) {
+ InputStream inputStream = get.getResponseBodyAsStream();
+ Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
+ // Download via gallery app
+ thumbnail = bitmap;
}
}
+
+ // Handle PNG
+ if (thumbnail != null && file.getMimetype().equalsIgnoreCase("image/png")) {
+ thumbnail = handlePNG(thumbnail, pxW);
+ }
+
+ // Add thumbnail to cache
+ if (thumbnail != null) {
+ addBitmapToCache(imageKey, thumbnail);
+ }
} catch (Exception e) {
e.printStackTrace();
}
}
- private Bitmap doFileInBackground() {
+ private Bitmap handlePNG(Bitmap bitmap, int px){
+ Bitmap resultBitmap = Bitmap.createBitmap(px,
+ px,
+ Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(resultBitmap);
+
+ c.drawColor(MainApp.getAppContext().getResources().
+ getColor(R.color.background_color));
+ c.drawBitmap(bitmap, 0, 0, null);
+
+ return resultBitmap;
+ }
+
+ private Bitmap doFileInBackground(Boolean mIsThumbnail) {
File file = (File)mFile;
- final String imageKey = String.valueOf(file.hashCode());
+ // distinguish between thumbnail and resized image
+ String temp = String.valueOf(file.hashCode());
+ if (mIsThumbnail){
+ temp = "t" + temp;
+ } else {
+ temp = "r" + temp;
+ }
+
+ final String imageKey = temp;
// Check disk cache in background thread
Bitmap thumbnail = getBitmapFromDiskCache(imageKey);
// Not found in disk cache
if (thumbnail == null) {
-
- int px = getThumbnailDimension();
+ int pxW = 0;
+ int pxH = 0;
+ if (mIsThumbnail) {
+ pxW = pxH = getThumbnailDimension();
+ } else {
+ Point p = getScreenDimension();
+ pxW = p.x;
+ pxH = p.y;
+ }
Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(
- file.getAbsolutePath(), px, px);
+ file.getAbsolutePath(), pxW, pxH);
if (bitmap != null) {
- thumbnail = addThumbnailToCache(imageKey, bitmap, file.getPath(), px);
+ thumbnail = addThumbnailToCache(imageKey, bitmap, file.getPath(), pxW, pxH);
}
}
return thumbnail;
if (bitmapData == null || bitmapData != file) {
// Cancel previous task
bitmapWorkerTask.cancel(true);
+ Log_OC.v(TAG, "Cancelled generation of thumbnail for a reused imageView");
} else {
// The same work is already in progress
return false;
public class ProviderMeta {\r
\r
public static final String DB_NAME = "filelist";\r
- public static final int DB_VERSION = 10;\r
+ public static final int DB_VERSION = 13;\r
\r
private ProviderMeta() {\r
}\r
static public class ProviderTableMeta implements BaseColumns {\r
public static final String FILE_TABLE_NAME = "filelist";\r
public static final String OCSHARES_TABLE_NAME = "ocshares";\r
+ public static final String CAPABILITIES_TABLE_NAME = "capabilities";\r
public static final Uri CONTENT_URI = Uri.parse("content://"\r
+ MainApp.getAuthority() + "/");\r
public static final Uri CONTENT_URI_FILE = Uri.parse("content://"\r
+ MainApp.getAuthority() + "/dir");\r
public static final Uri CONTENT_URI_SHARE = Uri.parse("content://"\r
+ MainApp.getAuthority() + "/shares");\r
+ public static final Uri CONTENT_URI_CAPABILITIES = Uri.parse("content://"\r
+ + MainApp.getAuthority() + "/capabilities");\r
\r
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.owncloud.file";\r
public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.owncloud.file";\r
public static final String FILE_STORAGE_PATH = "media_path";\r
public static final String FILE_PATH = "path";\r
public static final String FILE_ACCOUNT_OWNER = "file_owner";\r
- public static final String FILE_LAST_SYNC_DATE = "last_sync_date"; // _for_properties, but let's keep it as it is\r
+ public static final String FILE_LAST_SYNC_DATE = "last_sync_date";// _for_properties, but let's keep it as it is\r
public static final String FILE_LAST_SYNC_DATE_FOR_DATA = "last_sync_date_for_data";\r
public static final String FILE_KEEP_IN_SYNC = "keep_in_sync";\r
public static final String FILE_ETAG = "etag";\r
- public static final String FILE_SHARE_BY_LINK = "share_by_link";\r
+ public static final String FILE_SHARED_VIA_LINK = "share_by_link";\r
+ public static final String FILE_SHARED_WITH_SHAREE = "shared_via_users";\r
public static final String FILE_PUBLIC_LINK = "public_link";\r
public static final String FILE_PERMISSIONS = "permissions";\r
public static final String FILE_REMOTE_ID = "remote_id";\r
public static final String FILE_UPDATE_THUMBNAIL = "update_thumbnail";\r
public static final String FILE_IS_DOWNLOADING= "is_downloading";\r
+ public static final String FILE_ETAG_IN_CONFLICT = "etag_in_conflict";\r
\r
public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME\r
+ " collate nocase asc";\r
\r
public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE \r
+ " collate nocase asc";\r
- \r
\r
+ // Columns of capabilities table\r
+ public static final String CAPABILITIES_ACCOUNT_NAME = "account";\r
+ public static final String CAPABILITIES_VERSION_MAYOR = "version_mayor";\r
+ public static final String CAPABILITIES_VERSION_MINOR = "version_minor";\r
+ public static final String CAPABILITIES_VERSION_MICRO = "version_micro";\r
+ public static final String CAPABILITIES_VERSION_STRING = "version_string";\r
+ public static final String CAPABILITIES_VERSION_EDITION = "version_edition";\r
+ public static final String CAPABILITIES_CORE_POLLINTERVAL = "core_pollinterval";\r
+ public static final String CAPABILITIES_SHARING_API_ENABLED = "sharing_api_enabled";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_ENABLED = "sharing_public_enabled";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED = "sharing_public_password_enforced";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED =\r
+ "sharing_public_expire_date_enabled";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS =\r
+ "sharing_public_expire_date_days";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED =\r
+ "sharing_public_expire_date_enforced";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_SEND_MAIL = "sharing_public_send_mail";\r
+ public static final String CAPABILITIES_SHARING_PUBLIC_UPLOAD = "sharing_public_upload";\r
+ public static final String CAPABILITIES_SHARING_USER_SEND_MAIL = "sharing_user_send_mail";\r
+ public static final String CAPABILITIES_SHARING_RESHARING = "sharing_resharing";\r
+ public static final String CAPABILITIES_SHARING_FEDERATION_OUTGOING = "sharing_federation_outgoing";\r
+ public static final String CAPABILITIES_SHARING_FEDERATION_INCOMING = "sharing_federation_incoming";\r
+ public static final String CAPABILITIES_FILES_BIGFILECHUNKING = "files_bigfilechunking";\r
+ public static final String CAPABILITIES_FILES_UNDELETE = "files_undelete";\r
+ public static final String CAPABILITIES_FILES_VERSIONING = "files_versioning";\r
+\r
+ public static final String CAPABILITIES_DEFAULT_SORT_ORDER = CAPABILITIES_ACCOUNT_NAME\r
+ + " collate nocase asc";\r
}\r
}\r
import android.view.MenuItem;
import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
-import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.lib.resources.status.CapabilityBooleanType;
+import com.owncloud.android.lib.resources.status.OCCapability;
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
import com.owncloud.android.ui.activity.ComponentsGetter;
/**
- * Filters out the file actions available in a given {@link Menu} for a given {@link OCFile}
+ * Filters out the file actions available in a given {@link Menu} for a given {@link OCFile}
* according to the current state of the latest.
*/
public class FileMenuFilter {
private ComponentsGetter mComponentsGetter;
private Account mAccount;
private Context mContext;
-
+
/**
* Constructor
- *
+ *
* @param targetFile {@link OCFile} target of the action to filter in the {@link Menu}.
* @param account ownCloud {@link Account} holding targetFile.
* @param cg Accessor to app components, needed to access the
* {@link FileUploader} and {@link FileDownloader} services
* @param context Android {@link Context}, needed to access build setup resources.
*/
- public FileMenuFilter(OCFile targetFile, Account account, ComponentsGetter cg, Context context) {
+ public FileMenuFilter(OCFile targetFile, Account account, ComponentsGetter cg,
+ Context context) {
mFile = targetFile;
mAccount = account;
mComponentsGetter = cg;
mContext = context;
}
-
-
+
+
/**
* Filters out the file actions available in the passed {@link Menu} taken into account
* the state of the {@link OCFile} held by the filter.
- *
+ *
* @param menu Options or context menu to filter.
*/
public void filter(Menu menu) {
- List<Integer> toShow = new ArrayList<Integer>();
- List<Integer> toHide = new ArrayList<Integer>();
-
+ List<Integer> toShow = new ArrayList<Integer>();
+ List<Integer> toHide = new ArrayList<Integer>();
+
filter(toShow, toHide);
-
+
MenuItem item = null;
for (int i : toShow) {
item = menu.findItem(i);
item.setEnabled(true);
}
}
-
+
for (int i : toHide) {
item = menu.findItem(i);
if (item != null) {
/**
* Performs the real filtering, to be applied in the {@link Menu} by the caller methods.
- *
+ *
* Decides what actions must be shown and hidden.
- *
- * @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.
*/
private void filter(List<Integer> toShow, List <Integer> toHide) {
- boolean downloading = false;
- boolean uploading = false;
+ boolean synchronizing = false;
if (mComponentsGetter != null && mFile != null && mAccount != null) {
- FileDownloaderBinder downloaderBinder = mComponentsGetter.getFileDownloaderBinder();
- downloading = (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile));
OperationsServiceBinder opsBinder = mComponentsGetter.getOperationsServiceBinder();
- downloading |= (opsBinder != null && opsBinder.isSynchronizing(mAccount, mFile.getRemotePath()));
FileUploaderBinder uploaderBinder = mComponentsGetter.getFileUploaderBinder();
- uploading = (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile));
+ FileDownloaderBinder downloaderBinder = mComponentsGetter.getFileDownloaderBinder();
+ synchronizing = (
+ // comparing local and remote
+ (opsBinder != null && opsBinder.isSynchronizing(mAccount, mFile.getRemotePath())) ||
+ // downloading
+ (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) ||
+ // uploading
+ (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile))
+ );
}
-
+
/// decision is taken for each possible action on a file in the menu
-
+
// DOWNLOAD
- if (mFile == null || mFile.isDown() || downloading || uploading) {
+ if (mFile == null || mFile.isDown() || mFile.isFolder() || synchronizing) {
toHide.add(R.id.action_download_file);
-
+
} else {
toShow.add(R.id.action_download_file);
}
-
+
// RENAME
- if (mFile == null || downloading || uploading) {
+ if (mFile == null || synchronizing) {
toHide.add(R.id.action_rename_file);
-
+
} else {
toShow.add(R.id.action_rename_file);
}
- // MOVE
- if (mFile == null || downloading || uploading) {
+ // MOVE & COPY
+ if (mFile == null || synchronizing) {
toHide.add(R.id.action_move);
-
+ toHide.add(R.id.action_copy);
} else {
toShow.add(R.id.action_move);
+ toShow.add(R.id.action_copy);
}
-
+
// REMOVE
- if (mFile == null || downloading || uploading) {
+ if (mFile == null || synchronizing) {
toHide.add(R.id.action_remove_file);
-
+
} else {
toShow.add(R.id.action_remove_file);
}
-
+
// OPEN WITH (different to preview!)
- if (mFile == null || mFile.isFolder() || !mFile.isDown() || downloading || uploading) {
+ if (mFile == null || mFile.isFolder() || !mFile.isDown() || synchronizing) {
toHide.add(R.id.action_open_file_with);
-
+
} else {
toShow.add(R.id.action_open_file_with);
}
-
-
- // CANCEL DOWNLOAD
- if (mFile == null || !downloading) {
- toHide.add(R.id.action_cancel_download);
- } else {
- toShow.add(R.id.action_cancel_download);
- }
-
- // CANCEL UPLOAD
- if (mFile == null || !uploading || mFile.isFolder()) {
- toHide.add(R.id.action_cancel_upload);
+
+ // CANCEL SYNCHRONIZATION
+ if (mFile == null || !synchronizing) {
+ toHide.add(R.id.action_cancel_sync);
+
} else {
- toShow.add(R.id.action_cancel_upload);
+ toShow.add(R.id.action_cancel_sync);
}
-
- // SYNC FILE CONTENTS
- if (mFile == null || mFile.isFolder() || !mFile.isDown() || downloading || uploading) {
+
+ // SYNC CONTENTS (BOTH FILE AND FOLDER)
+ if (mFile == null || (!mFile.isFolder() && !mFile.isDown()) || synchronizing) {
toHide.add(R.id.action_sync_file);
+
} else {
toShow.add(R.id.action_sync_file);
}
-
- // SHARE FILE
- // TODO add check on SHARE available on server side?
+
+ // SHARE FILE
boolean shareAllowed = (mContext != null &&
mContext.getString(R.string.share_feature).equalsIgnoreCase("on"));
- if (!shareAllowed || mFile == null) {
+ OCCapability capability = mComponentsGetter.getStorageManager().getCapability(mAccount.name);
+ boolean shareApiEnabled = capability != null &&
+ (capability.getFilesSharingApiEnabled().isTrue() ||
+ capability.getFilesSharingApiEnabled().isUnknown()
+ );
+ if (!shareAllowed || mFile == null || !shareApiEnabled) {
toHide.add(R.id.action_share_file);
} else {
toShow.add(R.id.action_share_file);
}
-
- // UNSHARE FILE
- // TODO add check on SHARE available on server side?
- if ( !shareAllowed || (mFile == null || !mFile.isShareByLink())) {
- toHide.add(R.id.action_unshare_file);
- } else {
- toShow.add(R.id.action_unshare_file);
- }
// SEE DETAILS
if (mFile == null || mFile.isFolder()) {
} else {
toShow.add(R.id.action_see_details);
}
-
+
// SEND
boolean sendAllowed = (mContext != null &&
mContext.getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on"));
- if (mFile == null || !sendAllowed || mFile.isFolder() || uploading || downloading) {
+ if (mFile == null || !sendAllowed || mFile.isFolder() || synchronizing) {
toHide.add(R.id.action_send_file);
} else {
toShow.add(R.id.action_send_file);
}
// FAVORITES
- if (mFile == null || downloading || uploading || mFile.isFolder() || mFile.isFavorite()) {
+ if (mFile == null || synchronizing || mFile.isFolder() || mFile.isFavorite()) {
toHide.add(R.id.action_favorite_file);
} else {
toShow.add(R.id.action_favorite_file);
}
// UNFAVORITES
- if (mFile == null || downloading || uploading || mFile.isFolder() || !mFile.isFavorite()) {
+ if (mFile == null || synchronizing || mFile.isFolder() || !mFile.isFavorite()) {
toHide.add(R.id.action_unfavorite_file);
} else {
toShow.add(R.id.action_unfavorite_file);
}
+ // STREAM
+ if (mFile != null && !mFile.isDown() && (mFile.isAudio() || mFile.isVideo())){
+ toShow.add(R.id.action_stream_file);
+ } else {
+ toHide.add(R.id.action_stream_file);
+ }
+
+ // SET PICTURE AS
+ if (mFile == null || !mFile.isImage()){
+ toHide.add(R.id.action_set_as_wallpaper);
+ } else {
+ toShow.add(R.id.action_set_as_wallpaper);
+ }
+
}
}
package com.owncloud.android.files;
-import org.apache.http.protocol.HTTP;
-
import android.accounts.Account;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v4.app.DialogFragment;
import android.webkit.MimeTypeMap;
import android.widget.Toast;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
-
import com.owncloud.android.lib.common.network.WebdavUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import com.owncloud.android.services.OperationsService;
import com.owncloud.android.services.observer.FileObserverService;
import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.adapter.DiskLruImageCacheFileProvider;
+import com.owncloud.android.ui.activity.ShareActivity;
import com.owncloud.android.ui.dialog.ShareLinkToDialog;
+import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
+
+
+import java.io.File;
+import java.util.List;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.http.protocol.HTTP;
+
+import java.util.ArrayList;
+import java.util.List;
/**
*
public class FileOperationsHelper {
private static final String TAG = FileOperationsHelper.class.getName();
-
- private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG";
+
+ private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG";
protected FileActivity mFileActivity = null;
/// Identifier of operation in progress which result shouldn't be lost
private long mWaitingForOpId = Long.MAX_VALUE;
-
+
public FileOperationsHelper(FileActivity fileActivity) {
mFileActivity = fileActivity;
}
if (file != null) {
String storagePath = file.getStoragePath();
String encodedStoragePath = WebdavUtils.encodePath(storagePath);
-
+
Intent intentForSavedMimeType = new Intent(Intent.ACTION_VIEW);
- intentForSavedMimeType.setDataAndType(Uri.parse("file://"+ encodedStoragePath), file.getMimetype());
+ intentForSavedMimeType.setDataAndType(Uri.parse("file://"+ encodedStoragePath),
+ file.getMimetype());
intentForSavedMimeType.setFlags(
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
);
);
if (guessedMimeType != null && !guessedMimeType.equals(file.getMimetype())) {
intentForGuessedMimeType = new Intent(Intent.ACTION_VIEW);
- intentForGuessedMimeType.setDataAndType(Uri.parse("file://"+ encodedStoragePath), guessedMimeType);
+ intentForGuessedMimeType.
+ setDataAndType(Uri.parse("file://"+ encodedStoragePath),
+ guessedMimeType);
intentForGuessedMimeType.setFlags(
- Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+ Intent.FLAG_GRANT_READ_URI_PERMISSION |
+ Intent.FLAG_GRANT_WRITE_URI_PERMISSION
);
}
}
-
- Intent chooserIntent;
+
+ Intent openFileWithIntent;
if (intentForGuessedMimeType != null) {
- chooserIntent = Intent.createChooser(intentForGuessedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
+ openFileWithIntent = intentForGuessedMimeType;
} else {
- chooserIntent = Intent.createChooser(intentForSavedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
+ openFileWithIntent = intentForSavedMimeType;
}
-
- mFileActivity.startActivity(chooserIntent);
-
+
+ List<ResolveInfo> launchables = mFileActivity.getPackageManager().
+ queryIntentActivities(openFileWithIntent, PackageManager.GET_INTENT_FILTERS);
+
+ if(launchables != null && launchables.size() > 0) {
+ try {
+ mFileActivity.startActivity(
+ Intent.createChooser(
+ openFileWithIntent, mFileActivity.getString(R.string.actionbar_open_with)
+ )
+ );
+ } catch (ActivityNotFoundException anfe) {
+ showNoAppForFileTypeToast(mFileActivity.getApplicationContext());
+ }
+ } else {
+ showNoAppForFileTypeToast(mFileActivity.getApplicationContext());
+ }
+
} else {
Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
}
}
-
-
- public void shareFileWithLink(OCFile file) {
-
+
+ /**
+ * Displays a toast stating that no application could be found to open the file.
+ *
+ * @param context the context to be able to show a toast.
+ */
+ private void showNoAppForFileTypeToast(Context context) {
+ Toast.makeText(context,
+ R.string.file_list_no_app_for_file_type, Toast.LENGTH_SHORT)
+ .show();
+ }
+
+
+ /**
+ * Helper method to share a file via a public link. Starts a request to do it in {@link OperationsService}
+ *
+ * @param file The file to share.
+ * @param password Optional password to protect the public share.
+ */
+ public void shareFileViaLink(OCFile file, String password) {
if (isSharedSupported()) {
if (file != null) {
- String link = "https://fake.url";
- Intent intent = createShareWithLinkIntent(link);
- String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
- DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent, packagesToExclude, file);
- chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
-
+ mFileActivity.showLoadingDialog(
+ mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment)
+ );
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ if (password != null && password.length() > 0) {
+ service.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, password);
+ }
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
+
} else {
Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
+ // TODO user-level error?
}
-
+
} else {
// Show a Message
Toast t = Toast.makeText(
- mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG
+ mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api),
+ Toast.LENGTH_LONG
);
t.show();
}
}
-
-
+
+ public void getFileWithLink(OCFile file){
+ if (isSharedSupported()) {
+ if (file != null) {
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
+
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
+ }
+ } else {
+ // Show a Message
+ Toast t = Toast.makeText(
+ mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api),
+ Toast.LENGTH_LONG
+ );
+ t.show();
+ }
+ }
+
public void shareFileWithLinkToApp(OCFile file, String password, Intent sendIntent) {
if (file != null) {
- mFileActivity.showLoadingDialog();
-
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
+
Intent service = new Intent(mFileActivity, OperationsService.class);
- service.setAction(OperationsService.ACTION_CREATE_SHARE);
+ service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
- service.putExtra(OperationsService.EXTRA_PASSWORD_SHARE, password);
+ service.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, password);
service.putExtra(OperationsService.EXTRA_SEND_INTENT, sendIntent);
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
}
}
-
-
- private Intent createShareWithLinkIntent(String link) {
- Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
- intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
- intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE);
- return intentToShareLink;
+
+ /**
+ * Helper method to share a file with a known sharee. Starts a request to do it in {@link OperationsService}
+ *
+ * @param file The file to share.
+ * @param shareeName Name (user name or group name) of the target sharee.
+ * @param shareType The share type determines the sharee type.
+ */
+ public void shareFileWithSharee(OCFile file, String shareeName, ShareType shareType) {
+ if (file != null) {
+ // TODO check capability?
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
+
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_CREATE_SHARE_WITH_SHAREE);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_SHARE_WITH, shareeName);
+ service.putExtra(OperationsService.EXTRA_SHARE_TYPE, shareType);
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
+ }
}
-
-
+
+
/**
- * @return 'True' if the server supports the Share API
+ * @return 'True' if the server supports the Share API
*/
public boolean isSharedSupported() {
if (mFileActivity.getAccount() != null) {
}
return false;
}
-
-
- public void unshareFileWithLink(OCFile file) {
-
+
+
+ /**
+ * Helper method to unshare a file publicly shared via link.
+ * Starts a request to do it in {@link OperationsService}
+ *
+ * @param file The file to unshare.
+ */
+ public void unshareFileViaLink(OCFile file) {
+
+ // Unshare the file: Create the intent
+ Intent unshareService = new Intent(mFileActivity, OperationsService.class);
+ unshareService.setAction(OperationsService.ACTION_UNSHARE);
+ unshareService.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ unshareService.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ unshareService.putExtra(OperationsService.EXTRA_SHARE_TYPE, ShareType.PUBLIC_LINK);
+ unshareService.putExtra(OperationsService.EXTRA_SHARE_WITH, "");
+
+ queueShareIntent(unshareService);
+ }
+
+ public void unshareFileWithUserOrGroup(OCFile file, ShareType shareType, String userOrGroup){
+
+ // Unshare the file: Create the intent
+ Intent unshareService = new Intent(mFileActivity, OperationsService.class);
+ unshareService.setAction(OperationsService.ACTION_UNSHARE);
+ unshareService.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ unshareService.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ unshareService.putExtra(OperationsService.EXTRA_SHARE_TYPE, shareType);
+ unshareService.putExtra(OperationsService.EXTRA_SHARE_WITH, userOrGroup);
+
+ queueShareIntent(unshareService);
+ }
+
+
+ private void queueShareIntent(Intent shareIntent){
if (isSharedSupported()) {
// Unshare the file
- Intent service = new Intent(mFileActivity, OperationsService.class);
- service.setAction(OperationsService.ACTION_UNSHARE);
- service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
- service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
- mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
-
- mFileActivity.showLoadingDialog();
-
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().
+ queueNewOperation(shareIntent);
+
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
+
} else {
// Show a Message
- Toast t = Toast.makeText(mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
+ Toast t = Toast.makeText(mFileActivity,
+ mFileActivity.getString(R.string.share_link_no_support_share_api),
+ Toast.LENGTH_LONG);
t.show();
-
+
}
}
-
+
+ /**
+ * Show an instance of {@link ShareType} for sharing or unsharing the {@OCFile} received as parameter.
+ *
+ * @param file File to share or unshare.
+ */
+ public void showShareFile(OCFile file){
+ Intent intent = new Intent(mFileActivity, ShareActivity.class);
+ intent.putExtra(mFileActivity.EXTRA_FILE, file);
+ intent.putExtra(mFileActivity.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ mFileActivity.startActivity(intent);
+
+ }
+
+
+ /**
+ * Starts a dialog that requests a password to the user to protect a share link.
+ *
+ * @param file File which public share will be protected by the requested password
+ * @param createShare When 'true', the request for password will be followed by the creation of a new
+ * public link; when 'false', a public share is assumed to exist, and the password
+ * is bound to it.
+ */
+ public void requestPasswordForShareViaLink(OCFile file, boolean createShare) {
+ SharePasswordDialogFragment dialog =
+ SharePasswordDialogFragment.newInstance(file, createShare);
+ dialog.show(
+ mFileActivity.getSupportFragmentManager(),
+ SharePasswordDialogFragment.PASSWORD_FRAGMENT
+ );
+ }
+
+ /**
+ * Updates a public share on a file to set its password.
+ * Starts a request to do it in {@link OperationsService}
+ *
+ * @param file File which public share will be protected with a password.
+ * @param password Password to set for the public link; null or empty string to clear
+ * the current password
+ */
+ public void setPasswordToShareViaLink(OCFile file, String password) {
+ // Set password updating share
+ Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class);
+ updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+ updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ updateShareIntent.putExtra(
+ OperationsService.EXTRA_SHARE_PASSWORD,
+ (password == null) ? "" : password
+ );
+
+ queueShareIntent(updateShareIntent);
+ }
+
+
+ /**
+ * Updates a public share on a file to set its expiration date.
+ * Starts a request to do it in {@link OperationsService}
+ *
+ * @param file File which public share will be constrained with an expiration date.
+ * @param expirationTimeInMillis Expiration date to set. A negative value clears the current expiration
+ * date, leaving the link unrestricted. Zero makes no change.
+ */
+ public void setExpirationDateToShareViaLink(OCFile file, long expirationTimeInMillis) {
+ Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class);
+ updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+ updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ updateShareIntent.putExtra(
+ OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS,
+ expirationTimeInMillis
+ );
+ queueShareIntent(updateShareIntent);
+ }
+
+
+ /**
+ * @return 'True' if the server supports the Search Users API
+ */
+ public boolean isSearchUsersSupportedSupported() {
+ if (mFileActivity.getAccount() != null) {
+ OwnCloudVersion serverVersion = AccountUtils.getServerVersion(mFileActivity.getAccount());
+ return (serverVersion != null && serverVersion.isSearchUsersSupported());
+ }
+ return false;
+ }
+
public void sendDownloadedFile(OCFile file) {
if (file != null) {
String storagePath = file.getStoragePath();
sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action
// Show dialog, without the own app
- String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
- DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
+ String[] packagesToExclude = new String[]{mFileActivity.getPackageName()};
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude);
chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
} else {
Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
}
}
-
-
+
+ public void setPictureAs(OCFile file) {
+ if (file != null){
+ if (file.isDown()) {
+ File externalFile = new File(file.getStoragePath());
+ Uri sendUri = Uri.fromFile(externalFile);
+ Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
+ intent.setDataAndType(sendUri, file.getMimetype());
+ intent.putExtra("mimeType", file.getMimetype());
+ mFileActivity.startActivityForResult(Intent.createChooser(intent,
+ mFileActivity.getString(R.string.set_as)), 200);
+ } else {
+ // TODO re-enable after resized images is available
+ Uri sendUri = Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath());
+ Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
+ intent.setDataAndType(sendUri, file.getMimetype());
+ intent.putExtra("mimeType", file.getMimetype());
+ mFileActivity.startActivityForResult(Intent.createChooser(intent, "Set As"), 200);
+
+// Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
+// // set MimeType
+// sendIntent.setType(file.getMimetype());
+//// sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + "/#" + file.getRemoteId() + "#" + file.getFileName()));
+// sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath()));
+// sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action
+//
+// // Show dialog, without the own app
+// String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+// DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
+// chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+ }
+ } else {
+ Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
+ }
+ }
+
+ public void sendCachedImage(OCFile file) {
+ if (file != null) {
+ Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
+ // set MimeType
+ sendIntent.setType(file.getMimetype());
+// sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + "/#" + file.getRemoteId() + "#" + file.getFileName()));
+ sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath()));
+ sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action
+
+ // Show dialog, without the own app
+ String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude);
+ chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+ } else {
+ Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
+ }
+ }
+
+ public void syncFiles(ArrayList<OCFile> files) {
+ for (OCFile file: files) {
+ syncFile(file);
+ }
+ }
+
+ /**
+ * Request the synchronization of a file or folder with the OC server, including its contents.
+ *
+ * @param file The file or folder to synchronize
+ */
public void syncFile(OCFile file) {
-
if (!file.isFolder()){
Intent intent = new Intent(mFileActivity, OperationsService.class);
intent.setAction(OperationsService.ACTION_SYNC_FILE);
intent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
intent.putExtra(OperationsService.EXTRA_SYNC_FILE_CONTENTS, true);
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(intent);
- mFileActivity.showLoadingDialog();
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
} else {
Intent intent = new Intent(mFileActivity, OperationsService.class);
intent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
intent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
mFileActivity.startService(intent);
+
+ }
+ }
+
+ public void toggleFavorites(ArrayList<OCFile> files, boolean isFavorite){
+ for (OCFile file: files) {
+ toggleFavorite(file, isFavorite);
}
}
service.putExtra(OperationsService.EXTRA_NEWNAME, newFilename);
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
- mFileActivity.showLoadingDialog();
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
}
service.putExtra(OperationsService.EXTRA_REMOVE_ONLY_LOCAL, onlyLocalCopy);
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
- mFileActivity.showLoadingDialog();
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
}
-
-
+
+
public void createFolder(String remotePath, boolean createFullPath) {
// Create Folder
Intent service = new Intent(mFileActivity, OperationsService.class);
service.putExtra(OperationsService.EXTRA_CREATE_FULL_PATH, createFullPath);
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
- mFileActivity.showLoadingDialog();
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
}
/**
public void cancelTransference(OCFile file) {
Account account = mFileActivity.getAccount();
if (file.isFolder()) {
- OperationsService.OperationsServiceBinder opsBinder = mFileActivity.getOperationsServiceBinder();
+ OperationsService.OperationsServiceBinder opsBinder =
+ mFileActivity.getOperationsServiceBinder();
if (opsBinder != null) {
opsBinder.cancel(account, file);
}
// for both files and folders
FileDownloaderBinder downloaderBinder = mFileActivity.getFileDownloaderBinder();
- FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
if (downloaderBinder != null && downloaderBinder.isDownloading(account, file)) {
downloaderBinder.cancel(account, file);
-
- // TODO - review why is this here, and solve in a better way
- // Remove etag for parent, if file is a favorite
- if (file.isFavorite()) {
- OCFile parent = mFileActivity.getStorageManager().getFileById(file.getParentId());
- parent.setEtag("");
- mFileActivity.getStorageManager().saveFile(parent);
- }
-
- } else if (uploaderBinder != null && uploaderBinder.isUploading(account, file)) {
+ }
+ FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
+ if (uploaderBinder != null && uploaderBinder.isUploading(account, file)) {
uploaderBinder.cancel(account, file);
}
}
/**
* Start move file operation
- * @param newfile File where it is going to be moved
- * @param currentFile File with the previous info
+ *
+ * @param newfile File where it is going to be moved
+ * @param currentFile File with the previous info
*/
public void moveFile(OCFile newfile, OCFile currentFile) {
// Move files
service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
- mFileActivity.showLoadingDialog();
+ // TODO Tobi loading dialog?
+// mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+// getString(R.string.wait_a_moment));
}
+ /**
+ * Start copy file operation
+ *
+ * @param newfile File where it is going to be moved
+ * @param currentFile File with the previous info
+ */
+ public void copyFile(OCFile newfile, OCFile currentFile) {
+ // Copy files
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_COPY_FILE);
+ service.putExtra(OperationsService.EXTRA_NEW_PARENT_PATH, newfile.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, currentFile.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
+
+ mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+ getString(R.string.wait_a_moment));
+ }
public long getOpIdWaitingFor() {
return mWaitingForOpId;
public void setOpIdWaitingFor(long waitingForOpId) {
mWaitingForOpId = waitingForOpId;
}
-
+
/**
* @return 'True' if the server doesn't need to check forbidden characters
*/
public boolean isVersionWithForbiddenCharacters() {
if (mFileActivity.getAccount() != null) {
- OwnCloudVersion serverVersion = AccountUtils.getServerVersion(mFileActivity.getAccount());
+ OwnCloudVersion serverVersion =
+ AccountUtils.getServerVersion(mFileActivity.getAccount());
return (serverVersion != null && serverVersion.isVersionWithForbiddenCharacters());
}
return false;
}
+
}
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.utils.FileStorageUtils;
-
import android.accounts.Account;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State;
+import android.os.BatteryManager;
import android.preference.PreferenceManager;
import android.provider.MediaStore.Images;
import android.provider.MediaStore.Video;
@Override
public void onReceive(Context context, Intent intent) {
Log_OC.d(TAG, "Received: " + intent.getAction());
- if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
+ if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION) || intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)) {
handleConnectivityAction(context, intent);
}else if (intent.getAction().equals(NEW_PHOTO_ACTION_UNOFFICIAL)) {
handleNewPictureAction(context, intent);
file_name = c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME));
mime_type = c.getString(c.getColumnIndex(Images.Media.MIME_TYPE));
c.close();
-
Log_OC.d(TAG, file_path + "");
// save always temporally the picture to upload
db.putFileForLater(file_path, account.name, null);
db.close();
- if (!isOnline(context) || (instantPictureUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
+ if (!isOnline(context)
+ || (instantPictureUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))
+ || (instantUploadWhenChargingOnly(context) && !isCharging(context))
+ ) {
return;
}
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploader.KEY_MIME_TYPE, mime_type);
i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true);
+
+ // instant upload behaviour
+ i = addInstantUploadBehaviour(i, context);
+
context.startService(i);
}
+ private Intent addInstantUploadBehaviour(Intent i, Context context){
+ SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+ String behaviour = appPreferences.getString("prefs_instant_behaviour", "NOTHING");
+
+ if (behaviour.equalsIgnoreCase("NOTHING")) {
+ Log_OC.d(TAG, "upload file and do nothing");
+ i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_FORGET);
+ } else if (behaviour.equalsIgnoreCase("MOVE")) {
+ i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
+ Log_OC.d(TAG, "upload file and move file to oc folder");
+ }
+ return i;
+ }
+
private void handleNewVideoAction(Context context, Intent intent) {
Cursor c = null;
String file_path = null;
mime_type = c.getString(c.getColumnIndex(Video.Media.MIME_TYPE));
c.close();
Log_OC.d(TAG, file_path + "");
+
+ // save always temporally the picture to upload
+ DbHandler db = new DbHandler(context);
+ db.putFileForLater(file_path, account.name, null);
+ db.close();
- if (!isOnline(context) || (instantVideoUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
+ if (!isOnline(context)
+ || (instantVideoUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))
+ || (instantVideoUploadWhenChargingOnly(context) && !isCharging(context))
+ ) {
return;
}
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploader.KEY_MIME_TYPE, mime_type);
i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true);
+
+ // instant upload behaviour
+ i = addInstantUploadBehaviour(i, context);
+
context.startService(i);
}
private void handleConnectivityAction(Context context, Intent intent) {
- if (!instantPictureUploadEnabled(context)) {
+ if (!instantPictureUploadEnabled(context) && !instantVideoUploadEnabled(context)) {
Log_OC.d(TAG, "Instant upload disabled, don't upload anything");
return;
}
+ if (instantPictureUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context)){
+ Account account = AccountUtils.getCurrentOwnCloudAccount(context);
+ if (account == null) {
+ Log_OC.w(TAG, "No owncloud account found for instant upload, aborting");
+ return;
+ }
+
+ Intent i = new Intent(context, FileUploader.class);
+ i.putExtra(FileUploader.KEY_ACCOUNT, account);
+ i.putExtra(FileUploader.KEY_CANCEL_ALL, true);
+ context.startService(i);
+ }
+
if (!intent.hasExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY)
&& isOnline(context)
- && (!instantPictureUploadViaWiFiOnly(context) || (instantPictureUploadViaWiFiOnly(context) == isConnectedViaWiFi(context) == true))) {
+ && (!instantUploadWhenChargingOnly(context) || (instantUploadWhenChargingOnly(context) && isCharging(context)))
+ && (!instantVideoUploadWhenChargingOnly(context) || (instantVideoUploadWhenChargingOnly(context) && isCharging(context)))
+ && (!instantPictureUploadViaWiFiOnly(context) || (instantPictureUploadViaWiFiOnly(context) && isConnectedViaWiFi(context)))
+ && (!instantVideoUploadViaWiFiOnly(context) || (instantVideoUploadViaWiFiOnly(context) && isConnectedViaWiFi(context)))
+ ) {
DbHandler db = new DbHandler(context);
Cursor c = db.getAwaitingFiles();
if (c.moveToFirst()) {
do {
+ if (instantPictureUploadViaWiFiOnly(context) &&
+ !isConnectedViaWiFi(context)){
+ break;
+ }
+
String account_name = c.getString(c.getColumnIndex("account"));
String file_path = c.getString(c.getColumnIndex("path"));
File f = new File(file_path);
i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, f.getName()));
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true);
+
+ // instant upload behaviour
+ i = addInstantUploadBehaviour(i, context);
+
context.startService(i);
} else {
c.close();
db.close();
}
-
}
public static boolean isOnline(Context context) {
&& cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI
&& cm.getActiveNetworkInfo().getState() == State.CONNECTED;
}
+
+ public static boolean isCharging(Context context){
+ IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ Intent batteryStatus = context.registerReceiver(null, ifilter);
+
+ int status = 0;
+ if (batteryStatus != null) {
+ status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+ }
+ return status == BatteryManager.BATTERY_STATUS_CHARGING ||
+ status == BatteryManager.BATTERY_STATUS_FULL;
+ }
public static boolean instantPictureUploadEnabled(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_uploading", false);
public static boolean instantVideoUploadViaWiFiOnly(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_wifi", false);
}
+ public static boolean instantUploadWhenChargingOnly(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_charging", false);
+ }
+ public static boolean instantVideoUploadWhenChargingOnly(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_charging", false);
+ }
}
package com.owncloud.android.files.services;
import java.io.File;
-import java.io.IOException;
import java.util.AbstractList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
-import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.authentication.AuthenticatorActivity;
import android.accounts.Account;
import android.accounts.AccountManager;
-import android.accounts.AccountsException;
import android.accounts.OnAccountsUpdateListener;
import android.app.NotificationManager;
import android.app.PendingIntent;
/**
* Entry point to add one or several files to the queue of downloads.
- * <p/>
+ *
* New downloads are added calling to startService(), resulting in a call to this method.
* This ensures the service will keep on working although the caller activity goes away.
*/
} else {
final Account account = intent.getParcelableExtra(EXTRA_ACCOUNT);
final OCFile file = intent.getParcelableExtra(EXTRA_FILE);
-
- /*Log_OC.v(
- "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Received request to download file"
- );*/
-
AbstractList<String> requestedDownloads = new Vector<String>();
try {
DownloadFileOperation newDownload = new DownloadFileOperation(account, file);
Pair<String, String> putResult = mPendingDownloads.putIfAbsent(
account, file.getRemotePath(), newDownload
);
- String downloadKey = putResult.first;
- requestedDownloads.add(downloadKey);
- /*Log_OC.v(
- "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Download on " + file.getRemotePath() + " added to queue"
- );*/
-
- // Store file on db with state 'downloading'
- /*
- TODO - check if helps with UI responsiveness,
- letting only folders use FileDownloaderBinder to check
- FileDataStorageManager storageManager =
- new FileDataStorageManager(account, getContentResolver());
- file.setDownloading(true);
- storageManager.saveFile(file);
- */
-
- sendBroadcastNewDownload(newDownload, putResult.second);
+ if (putResult != null) {
+ String downloadKey = putResult.first;
+ requestedDownloads.add(downloadKey);
+ sendBroadcastNewDownload(newDownload, putResult.second);
+ } // else, file already in the queue of downloads; don't repeat the request
} catch (IllegalArgumentException e) {
Log_OC.e(TAG, "Not enough information provided in intent: " + e.getMessage());
* @param file A file in the queue of pending downloads
*/
public void cancel(Account account, OCFile file) {
- /*Log_OC.v(
- "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Received request to cancel download of " + file.getRemotePath()
- );
- Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Removing download of " + file.getRemotePath());*/
- Pair<DownloadFileOperation, String> removeResult =
- mPendingDownloads.remove(account, file.getRemotePath());
+ Pair<DownloadFileOperation, String> removeResult = mPendingDownloads.remove(account, file.getRemotePath());
DownloadFileOperation download = removeResult.first;
if (download != null) {
- /*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Canceling returned download of " + file.getRemotePath());*/
download.cancel();
} else {
if (mCurrentDownload != null && mCurrentAccount != null &&
mCurrentDownload.getRemotePath().startsWith(file.getRemotePath()) &&
account.name.equals(mCurrentAccount.name)) {
- /*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Canceling current sync as descendant: " + mCurrentDownload.getRemotePath());*/
mCurrentDownload.cancel();
}
}
}
/**
- * Cancels a pending or current upload for an account
+ * Cancels all the downloads for an account
*
- * @param account Owncloud accountName where the remote file will be stored.
+ * @param account ownCloud account.
*/
public void cancel(Account account) {
Log_OC.d(TAG, "Account= " + account.name);
/**
* Returns True when the file described by 'file' in the ownCloud account 'account'
* is downloading or waiting to download.
- * <p/>
+ *
* If 'file' is a directory, returns 'true' if any of its descendant files is downloading or
* waiting to download.
*
OnDatatransferProgressListener listener, Account account, OCFile file
) {
if (account == null || file == null || listener == null) return;
- //String targetKey = buildKey(account, file.getRemotePath());
mBoundListeners.put(file.getFileId(), listener);
}
/**
* Removes a listener interested in the progress of the download for a concrete file.
*
- * @param listener Object to notify about progress of transfer.
- * @param account ownCloud account holding the file of interest.
- * @param file {@link OCFile} of interest for listener.
+ * @param listener Object to notify about progress of transfer.
+ * @param account ownCloud account holding the file of interest.
+ * @param file {@link OCFile} of interest for listener.
*/
public void removeDatatransferProgressListener(
OnDatatransferProgressListener listener, Account account, OCFile file
) {
if (account == null || file == null || listener == null) return;
- //String targetKey = buildKey(account, file.getRemotePath());
Long fileId = file.getFileId();
if (mBoundListeners.get(fileId) == listener) {
mBoundListeners.remove(fileId);
@Override
public void onTransferProgress(long progressRate, long totalTransferredSoFar,
long totalToTransfer, String fileName) {
- //String key = buildKey(mCurrentDownload.getAccount(),
- // mCurrentDownload.getFile().getRemotePath());
OnDatatransferProgressListener boundListener =
mBoundListeners.get(mCurrentDownload.getFile().getFileId());
if (boundListener != null) {
}
}
- /**
- * Review downloads and cancel it if its account doesn't exist
- */
- public void checkAccountOfCurrentDownload() {
- if (mCurrentDownload != null &&
- !AccountUtils.exists(mCurrentDownload.getAccount(), getApplicationContext())) {
- mCurrentDownload.cancel();
- }
- // The rest of downloads are cancelled when they try to start
- }
-
}
/**
* Download worker. Performs the pending downloads in the order they were requested.
- * <p/>
+
* Created with the Looper of a new thread, started in {@link FileUploader#onCreate()}.
*/
private static class ServiceHandler extends Handler {
*/
private void downloadFile(String downloadKey) {
- /*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Getting download of " + downloadKey);*/
mCurrentDownload = mPendingDownloads.get(downloadKey);
if (mCurrentDownload != null) {
// Detect if the account exists
if (AccountUtils.exists(mCurrentDownload.getAccount(), getApplicationContext())) {
Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().name + " exists");
+
notifyDownloadStart(mCurrentDownload);
RemoteOperationResult downloadResult = null;
/// perform the download
- /*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Executing download of " + mCurrentDownload.getRemotePath());*/
downloadResult = mCurrentDownload.execute(mDownloadClient);
if (downloadResult.isSuccess()) {
saveDownloadedFile();
}
- } catch (AccountsException e) {
- Log_OC.e(TAG, "Error while trying to get authorization for "
- + mCurrentAccount.name, e);
- downloadResult = new RemoteOperationResult(e);
- } catch (IOException e) {
- Log_OC.e(TAG, "Error while trying to get authorization for "
- + mCurrentAccount.name, e);
+ } catch (Exception e) {
+ Log_OC.e(TAG, "Error downloading", e);
downloadResult = new RemoteOperationResult(e);
} finally {
- /*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Removing payload " + mCurrentDownload.getRemotePath());*/
-
Pair<DownloadFileOperation, String> removeResult =
mPendingDownloads.removePayload(mCurrentAccount,
mCurrentDownload.getRemotePath());
/// notify result
notifyDownloadResult(mCurrentDownload, downloadResult);
- sendBroadcastDownloadFinished(mCurrentDownload, downloadResult,
- removeResult.second);
+ sendBroadcastDownloadFinished(mCurrentDownload, downloadResult, removeResult.second);
}
+
} else {
// Cancel the transfer
Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().toString() +
/**
* Updates the OC File after a successful download.
+ *
+ * TODO move to DownloadFileOperation
*/
private void saveDownloadedFile() {
OCFile file = mStorageManager.getFileById(mCurrentDownload.getFile().getFileId());
file.setNeedsUpdateThumbnail(true);
file.setModificationTimestamp(mCurrentDownload.getModificationTimestamp());
file.setModificationTimestampAtLastSyncForData(mCurrentDownload.getModificationTimestamp());
- // file.setEtag(mCurrentDownload.getEtag()); // TODO Etag, where available
+ file.setEtag(mCurrentDownload.getEtag());
file.setMimetype(mCurrentDownload.getMimeType());
file.setStoragePath(mCurrentDownload.getSavePath());
file.setFileLength((new File(mCurrentDownload.getSavePath()).length()));
file.setRemoteId(mCurrentDownload.getFile().getRemoteId());
mStorageManager.saveFile(file);
mStorageManager.triggerMediaScan(file.getStoragePath());
+ mStorageManager.saveConflict(file, null);
}
/**
- * Update the OC File after a unsuccessful download
- */
- private void updateUnsuccessfulDownloadedFile() {
- OCFile file = mStorageManager.getFileById(mCurrentDownload.getFile().getFileId());
- file.setDownloading(false);
- mStorageManager.saveFile(file);
- }
-
-
- /**
* Creates a status notification to show the download progress
*
* @param download Download operation starting.
DownloadFileOperation download,
RemoteOperationResult downloadResult,
String unlinkedFromRemotePath) {
+
Intent end = new Intent(getDownloadFinishMessage());
end.putExtra(EXTRA_DOWNLOAD_RESULT, downloadResult.isSuccess());
end.putExtra(ACCOUNT_NAME, download.getAccount().name);
package com.owncloud.android.files.services;
import java.io.File;
-import java.io.IOException;
import java.util.AbstractList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import android.accounts.Account;
import android.accounts.AccountManager;
-import android.accounts.AccountsException;
import android.accounts.OnAccountsUpdateListener;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.os.Message;
import android.os.Process;
import android.support.v4.app.NotificationCompat;
+import android.util.Pair;
import android.webkit.MimeTypeMap;
import com.owncloud.android.R;
public static final String EXTRA_REMOTE_PATH = "REMOTE_PATH";
public static final String EXTRA_OLD_REMOTE_PATH = "OLD_REMOTE_PATH";
public static final String EXTRA_OLD_FILE_PATH = "OLD_FILE_PATH";
+ public static final String EXTRA_LINKED_TO_PATH = "LINKED_TO";
public static final String ACCOUNT_NAME = "ACCOUNT_NAME";
public static final String KEY_FILE = "FILE";
public static final String KEY_INSTANT_UPLOAD = "INSTANT_UPLOAD";
public static final String KEY_LOCAL_BEHAVIOUR = "BEHAVIOUR";
+ public static final String KEY_CANCEL_ALL = "CANCEL_ALL";
+
public static final int LOCAL_BEHAVIOUR_COPY = 0;
public static final int LOCAL_BEHAVIOUR_MOVE = 1;
public static final int LOCAL_BEHAVIOUR_FORGET = 2;
private ServiceHandler mServiceHandler;
private IBinder mBinder;
private OwnCloudClient mUploadClient = null;
- private Account mLastAccount = null;
+ private Account mCurrentAccount = null;
private FileDataStorageManager mStorageManager;
- private ConcurrentMap<String, UploadFileOperation> mPendingUploads =
- new ConcurrentHashMap<String, UploadFileOperation>();
+ private IndexedForest<UploadFileOperation> mPendingUploads = new IndexedForest<UploadFileOperation>();
private UploadFileOperation mCurrentUpload = null;
private NotificationManager mNotificationManager;
}
/**
- * Builds a key for mPendingUploads from the account and file to upload
- *
- * @param account Account where the file to upload is stored
- * @param file File to upload
- */
- private String buildRemoteName(Account account, OCFile file) {
- return account.name + file.getRemotePath();
- }
-
- private String buildRemoteName(Account account, String remotePath) {
- return account.name + remotePath;
- }
-
- /**
* Checks if an ownCloud server version should support chunked uploads.
*
* @param version OwnCloud version instance corresponding to an ownCloud
* server.
* @return 'True' if the ownCloud server with version supports chunked
* uploads.
+ *
+ * TODO - move to OCClient
*/
private static boolean chunkedUploadIsSupported(OwnCloudVersion version) {
return (version != null && version.compareTo(OwnCloudVersion.owncloud_v4_5) >= 0);
public int onStartCommand(Intent intent, int flags, int startId) {
Log_OC.d(TAG, "Starting command with id " + startId);
+ if (intent.hasExtra(KEY_CANCEL_ALL) && intent.hasExtra(KEY_ACCOUNT)){
+ Account account = intent.getParcelableExtra(KEY_ACCOUNT);
+
+ Log_OC.d(TAG, "Account= " + account.name);
+
+ if (mCurrentUpload != null) {
+ Log_OC.d(TAG, "Current Upload Account= " + mCurrentUpload.getAccount().name);
+ if (mCurrentUpload.getAccount().name.equals(account.name)) {
+ mCurrentUpload.cancel();
+ }
+ }
+ // Cancel pending uploads
+ cancelUploadsForAccount(account);
+ }
+
if (!intent.hasExtra(KEY_ACCOUNT) || !intent.hasExtra(KEY_UPLOAD_TYPE)
|| !(intent.hasExtra(KEY_LOCAL_FILE) || intent.hasExtra(KEY_FILE))) {
Log_OC.e(TAG, "Not enough information provided in intent");
boolean forceOverwrite = intent.getBooleanExtra(KEY_FORCE_OVERWRITE, false);
boolean isInstant = intent.getBooleanExtra(KEY_INSTANT_UPLOAD, false);
- int localAction = intent.getIntExtra(KEY_LOCAL_BEHAVIOUR, LOCAL_BEHAVIOUR_COPY);
+ int localAction = intent.getIntExtra(KEY_LOCAL_BEHAVIOUR, LOCAL_BEHAVIOUR_FORGET);
if (intent.hasExtra(KEY_FILE) && files == null) {
Log_OC.e(TAG, "Incorrect array for OCFiles provided in upload intent");
files = new OCFile[localPaths.length];
for (int i = 0; i < localPaths.length; i++) {
files[i] = obtainNewOCFileToUpload(remotePaths[i], localPaths[i],
- ((mimeTypes != null) ? mimeTypes[i] : null), storageManager);
+ ((mimeTypes != null) ? mimeTypes[i] : null));
if (files[i] == null) {
// TODO @andomaex add failure Notification
return Service.START_NOT_STICKY;
UploadFileOperation newUpload = null;
try {
for (int i = 0; i < files.length; i++) {
- uploadKey = buildRemoteName(account, files[i].getRemotePath());
- newUpload = new UploadFileOperation(account, files[i], chunked, isInstant,
+ newUpload = new UploadFileOperation(
+ account,
+ files[i],
+ chunked,
+ isInstant,
forceOverwrite, localAction,
- getApplicationContext());
+ getApplicationContext()
+ );
if (isInstant) {
newUpload.setRemoteFolderToBeCreated();
}
- // Grants that the file only upload once time
- mPendingUploads.putIfAbsent(uploadKey, newUpload);
-
newUpload.addDatatransferProgressListener(this);
- newUpload.addDatatransferProgressListener((FileUploaderBinder)mBinder);
- requestedUploads.add(uploadKey);
+ newUpload.addDatatransferProgressListener((FileUploaderBinder) mBinder);
+ Pair<String, String> putResult = mPendingUploads.putIfAbsent(
+ account, files[i].getRemotePath(), newUpload
+ );
+ if (putResult != null) {
+ uploadKey = putResult.first;
+ requestedUploads.add(uploadKey);
+ } // else, file already in the queue of uploads; don't repeat the request
}
} catch (IllegalArgumentException e) {
msg.obj = requestedUploads;
mServiceHandler.sendMessage(msg);
}
- Log_OC.i(TAG, "mPendingUploads size:" + mPendingUploads.size());
return Service.START_NOT_STICKY;
}
/**
* Cancels a pending or current upload of a remote file.
*
- * @param account Owncloud account where the remote file will be stored.
- * @param file A file in the queue of pending uploads
+ * @param account ownCloud account where the remote file will be stored.
+ * @param file A file in the queue of pending uploads
*/
public void cancel(Account account, OCFile file) {
- UploadFileOperation upload;
- synchronized (mPendingUploads) {
- upload = mPendingUploads.remove(buildRemoteName(account, file));
- }
+ Pair<UploadFileOperation, String> removeResult = mPendingUploads.remove(account, file.getRemotePath());
+ UploadFileOperation upload = removeResult.first;
if (upload != null) {
upload.cancel();
+ } else {
+ if (mCurrentUpload != null && mCurrentAccount != null &&
+ mCurrentUpload.getRemotePath().startsWith(file.getRemotePath()) &&
+ account.name.equals(mCurrentAccount.name)) {
+ mCurrentUpload.cancel();
+ }
}
}
/**
- * Cancels a pending or current upload for an account
+ * Cancels all the uploads for an account
*
- * @param account Owncloud accountName where the remote file will be stored.
+ * @param account ownCloud account.
*/
public void cancel(Account account) {
Log_OC.d(TAG, "Account= " + account.name);
}
}
// Cancel pending uploads
- cancelUploadForAccount(account.name);
+ cancelUploadsForAccount(account);
}
public void clearListeners() {
mBoundListeners.clear();
}
+
/**
* Returns True when the file described by 'file' is being uploaded to
* the ownCloud account 'account' or waiting for it
* @param file A file that could be in the queue of pending uploads
*/
public boolean isUploading(Account account, OCFile file) {
- if (account == null || file == null)
- return false;
- String targetKey = buildRemoteName(account, file);
- synchronized (mPendingUploads) {
- if (file.isFolder()) {
- // this can be slow if there are many uploads :(
- Iterator<String> it = mPendingUploads.keySet().iterator();
- boolean found = false;
- while (it.hasNext() && !found) {
- found = it.next().startsWith(targetKey);
- }
- return found;
- } else {
- return (mPendingUploads.containsKey(targetKey));
- }
- }
+ if (account == null || file == null) return false;
+ return (mPendingUploads.contains(account, file.getRemotePath()));
}
}
/**
- * Review uploads and cancel it if its account doesn't exist
+ * Builds a key for the map of listeners.
+ *
+ * TODO remove and replace key with file.getFileId() after changing current policy (upload file, then
+ * add to local database) to better policy (add to local database, then upload)
+ *
+ * @param account ownCloud account where the file to upload belongs.
+ * @param file File to upload
+ * @return Key
*/
- public void checkAccountOfCurrentUpload() {
- if (mCurrentUpload != null &&
- !AccountUtils.exists(mCurrentUpload.getAccount(), getApplicationContext())) {
- mCurrentUpload.cancel();
- }
- // The rest of uploads are cancelled when they try to start
+ private String buildRemoteName(Account account, OCFile file) {
+ return account.name + file.getRemotePath();
}
+
}
/**
/**
* Core upload method: sends the file(s) to upload
*
- * @param uploadKey Key to access the upload to perform, contained in
- * mPendingUploads
+ * @param uploadKey Key to access the upload to perform, contained in mPendingUploads
*/
public void uploadFile(String uploadKey) {
- synchronized (mPendingUploads) {
- mCurrentUpload = mPendingUploads.get(uploadKey);
- }
+ mCurrentUpload = mPendingUploads.get(uploadKey);
if (mCurrentUpload != null) {
-
// Detect if the account exists
if (AccountUtils.exists(mCurrentUpload.getAccount(), getApplicationContext())) {
Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().name + " exists");
RemoteOperationResult uploadResult = null, grantResult;
try {
- /// prepare client object to send requests to the ownCloud server
- if (mUploadClient == null ||
- !mLastAccount.equals(mCurrentUpload.getAccount())) {
- mLastAccount = mCurrentUpload.getAccount();
- mStorageManager =
- new FileDataStorageManager(mLastAccount, getContentResolver());
- OwnCloudAccount ocAccount = new OwnCloudAccount(mLastAccount, this);
- mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton().
- getClientFor(ocAccount, this);
- }
+ /// prepare client object to send the request to the ownCloud server
+ if (mCurrentAccount == null || !mCurrentAccount.equals(mCurrentUpload.getAccount())) {
+ mCurrentAccount = mCurrentUpload.getAccount();
+ mStorageManager = new FileDataStorageManager(
+ mCurrentAccount,
+ getContentResolver()
+ );
+ } // else, reuse storage manager from previous operation
+
+ // always get client from client manager, to get fresh credentials in case of update
+ OwnCloudAccount ocAccount = new OwnCloudAccount(mCurrentAccount, this);
+ mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+ getClientFor(ocAccount, this);
+
/// check the existence of the parent folder for the file to upload
String remoteParentPath = new File(mCurrentUpload.getRemotePath()).getParent();
uploadResult = mCurrentUpload.execute(mUploadClient);
if (uploadResult.isSuccess()) {
saveUploadedFile();
+
+ } else if (uploadResult.getCode() == ResultCode.SYNC_CONFLICT) {
+ mStorageManager.saveConflict(mCurrentUpload.getFile(),
+ mCurrentUpload.getFile().getEtagInConflict());
}
} else {
uploadResult = grantResult;
}
- } catch (AccountsException e) {
- Log_OC.e(TAG, "Error while trying to get autorization for " +
- mLastAccount.name, e);
- uploadResult = new RemoteOperationResult(e);
-
- } catch (IOException e) {
- Log_OC.e(TAG, "Error while trying to get autorization for " +
- mLastAccount.name, e);
+ } catch (Exception e) {
+ Log_OC.e(TAG, "Error uploading", e);
uploadResult = new RemoteOperationResult(e);
} finally {
- synchronized (mPendingUploads) {
- mPendingUploads.remove(uploadKey);
- Log_OC.i(TAG, "Remove CurrentUploadItem from pending upload Item Map.");
- }
- if (uploadResult != null && uploadResult.isException()) {
- // enforce the creation of a new client object for next uploads;
- // this grant that a new socket will be created in the future if
- // the current exception is due to an abrupt lose of network connection
- mUploadClient = null;
+ Pair<UploadFileOperation, String> removeResult;
+ if (mCurrentUpload.wasRenamed()) {
+ removeResult = mPendingUploads.removePayload(
+ mCurrentAccount,
+ mCurrentUpload.getOldFile().getRemotePath()
+ );
+ } else {
+ removeResult = mPendingUploads.removePayload(
+ mCurrentAccount,
+ mCurrentUpload.getRemotePath()
+ );
}
- }
- /// notify result
- notifyUploadResult(uploadResult, mCurrentUpload);
- sendFinalBroadcast(mCurrentUpload, uploadResult);
+ /// notify result
+ notifyUploadResult(mCurrentUpload, uploadResult);
+
+ sendBroadcastUploadFinished(mCurrentUpload, uploadResult, removeResult.second);
+ }
} else {
// Cancel the transfer
Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().toString() +
" doesn't exist");
- cancelUploadForAccount(mCurrentUpload.getAccount().name);
+ cancelUploadsForAccount(mCurrentUpload.getAccount());
}
}
* synchronized with the server, specially the modification time and Etag
* (where available)
*
- * TODO refactor this ugly thing
+ * TODO move into UploadFileOperation
*/
private void saveUploadedFile() {
OCFile file = mCurrentUpload.getFile();
if (result.isSuccess()) {
updateOCFile(file, (RemoteFile) result.getData().get(0));
file.setLastSyncDateForProperties(syncDate);
+ } else {
+ Log_OC.e(TAG, "Error reading properties of file after successful upload; this is gonna hurt...");
}
// / maybe this would be better as part of UploadFileOperation... or
if (oldFile.fileExists()) {
oldFile.setStoragePath(null);
mStorageManager.saveFile(oldFile);
+ mStorageManager.saveConflict(oldFile, null);
} // else: it was just an automatic renaming due to a name
// coincidence; nothing else is needed, the storagePath is right
}
file.setNeedsUpdateThumbnail(true);
mStorageManager.saveFile(file);
+ mStorageManager.saveConflict(file, null);
+
+ mStorageManager.triggerMediaScan(file.getStoragePath());
+
}
private void updateOCFile(OCFile file, RemoteFile remoteFile) {
file.setMimetype(remoteFile.getMimeType());
file.setModificationTimestamp(remoteFile.getModifiedTimestamp());
file.setModificationTimestampAtLastSyncForData(remoteFile.getModifiedTimestamp());
- // file.setEtag(remoteFile.getEtag()); // TODO Etag, where available
+ file.setEtag(remoteFile.getEtag());
file.setRemoteId(remoteFile.getRemoteId());
}
- private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType,
- FileDataStorageManager storageManager) {
+ private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType) {
// MIME type
if (mimeType == null || mimeType.length() <= 0) {
/**
* Updates the status notification with the result of an upload operation.
*
- * @param uploadResult Result of the upload operation.
- * @param upload Finished upload operation
+ * @param uploadResult Result of the upload operation.
+ * @param upload Finished upload operation
*/
- private void notifyUploadResult(
- RemoteOperationResult uploadResult, UploadFileOperation upload) {
+ private void notifyUploadResult(UploadFileOperation upload,
+ RemoteOperationResult uploadResult) {
Log_OC.d(TAG, "NotifyUploadResult with resultCode: " + uploadResult.getCode());
// / cancelled operation or success -> silent removal of progress notification
mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
* Sends a broadcast in order to the interested activities can update their
* view
*
- * @param upload Finished upload operation
- * @param uploadResult Result of the upload operation
+ * @param upload Finished upload operation
+ * @param uploadResult Result of the upload operation
+ * @param unlinkedFromRemotePath Path in the uploads tree where the upload was unlinked from
*/
- private void sendFinalBroadcast(UploadFileOperation upload, RemoteOperationResult uploadResult) {
+ private void sendBroadcastUploadFinished(
+ UploadFileOperation upload,
+ RemoteOperationResult uploadResult,
+ String unlinkedFromRemotePath) {
+
Intent end = new Intent(getUploadFinishMessage());
end.putExtra(EXTRA_REMOTE_PATH, upload.getRemotePath()); // real remote
// path, after
end.putExtra(EXTRA_OLD_FILE_PATH, upload.getOriginalStoragePath());
end.putExtra(ACCOUNT_NAME, upload.getAccount().name);
end.putExtra(EXTRA_UPLOAD_RESULT, uploadResult.isSuccess());
+ if (unlinkedFromRemotePath != null) {
+ end.putExtra(EXTRA_LINKED_TO_PATH, unlinkedFromRemotePath);
+ }
+
sendStickyBroadcast(end);
}
* @param localPath Full path to a file in the local file system.
* @param mimeType MIME type of the file.
* @return true if is needed to add the pdf file extension to the file
+ *
+ * TODO - move to OCFile or Utils class
*/
private boolean isPdfFileFromContentProviderWithoutExtension(String localPath,
String mimeType) {
/**
* Remove uploads of an account
- * @param accountName Name of an OC account
+ *
+ * @param account Downloads account to remove
*/
- private void cancelUploadForAccount(String accountName){
- // this can be slow if there are many uploads :(
- Iterator<String> it = mPendingUploads.keySet().iterator();
- Log_OC.d(TAG, "Number of pending updloads= " + mPendingUploads.size());
- while (it.hasNext()) {
- String key = it.next();
- Log_OC.d(TAG, "mPendingUploads CANCELLED " + key);
- if (key.startsWith(accountName)) {
- synchronized (mPendingUploads) {
- mPendingUploads.remove(key);
- }
- }
- }
+ private void cancelUploadsForAccount(Account account){
+ // Cancel pending uploads
+ mPendingUploads.remove(account);
}
}
public /* synchronized */ Pair<String, String> putIfAbsent(Account account, String remotePath, V value) {
String targetKey = buildKey(account, remotePath);
Node<V> valuedNode = new Node(targetKey, value);
- mMap.putIfAbsent(
- targetKey,
- valuedNode
+ Node<V> previousValue = mMap.putIfAbsent(
+ targetKey,
+ valuedNode
);
+ if (previousValue != null) {
+ // remotePath already known; not replaced
+ return null;
- String currentPath = remotePath, parentPath = null, parentKey = null;
- Node<V> currentNode = valuedNode, parentNode = null;
- boolean linked = false;
- while (!OCFile.ROOT_PATH.equals(currentPath) && !linked) {
- parentPath = new File(currentPath).getParent();
- if (!parentPath.endsWith(OCFile.PATH_SEPARATOR)) {
- parentPath += OCFile.PATH_SEPARATOR;
+ } else {
+ // value really added
+ String currentPath = remotePath, parentPath = null, parentKey = null;
+ Node<V> currentNode = valuedNode, parentNode = null;
+ boolean linked = false;
+ while (!OCFile.ROOT_PATH.equals(currentPath) && !linked) {
+ parentPath = new File(currentPath).getParent();
+ if (!parentPath.endsWith(OCFile.PATH_SEPARATOR)) {
+ parentPath += OCFile.PATH_SEPARATOR;
+ }
+ parentKey = buildKey(account, parentPath);
+ parentNode = mMap.get(parentKey);
+ if (parentNode == null) {
+ parentNode = new Node(parentKey, null);
+ parentNode.addChild(currentNode);
+ mMap.put(parentKey, parentNode);
+ } else {
+ parentNode.addChild(currentNode);
+ linked = true;
+ }
+ currentPath = parentPath;
+ currentNode = parentNode;
}
- parentKey = buildKey(account, parentPath);
- parentNode = mMap.get(parentKey);
- if (parentNode == null) {
- parentNode = new Node(parentKey, null);
- parentNode.addChild(currentNode);
- mMap.put(parentKey, parentNode);
- } else {
- parentNode.addChild(currentNode);
- linked = true;
+
+ String linkedTo = OCFile.ROOT_PATH;
+ if (linked) {
+ linkedTo = parentNode.getKey().substring(account.name.length());
}
- currentPath = parentPath;
- currentNode = parentNode;
- }
- String linkedTo = OCFile.ROOT_PATH;
- if (linked) {
- linkedTo = parentNode.getKey().substring(account.name.length());
+ return new Pair<String, String>(targetKey, linkedTo);
}
- return new Pair<String, String>(targetKey, linkedTo);
};
import java.util.Locale;
import com.owncloud.android.R;
+import com.owncloud.android.utils.DisplayUtils;
/**
if (mProgress != null) {
if (mProgress instanceof SeekBar) {
SeekBar seeker = (SeekBar) mProgress;
+ DisplayUtils.colorPreLollipopHorizontalSeekBar(seeker);
seeker.setOnSeekBarChangeListener(this);
+ } else {
+ DisplayUtils.colorPreLollipopHorizontalProgressBar(mProgress);
}
mProgress.setMax(1000);
}
package com.owncloud.android.media;
import android.accounts.Account;
+import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
+import android.net.Uri;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;
import android.os.IBinder;
import android.os.PowerManager;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.NotificationCompat;
import android.widget.Toast;
import java.io.IOException;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
/** Notification to keep in the notification bar while a song is playing */
private NotificationManager mNotificationManager;
- private Notification mNotification = null;
/** File being played */
private OCFile mFile;
/** Control panel shown to the user to control the playback, to register through binding */
private MediaControlView mMediaController;
-
+ /** Notification builder to create notifications, new reuse way since Android 6 */
+ private NotificationCompat.Builder mNotificationBuilder;
/**
* Helper method to get an error message suitable to show to users for errors occurred in media playback,
return context.getString(messageId);
}
+ public static AlertDialog.Builder streamWithExternalApp(final String uri, final Activity activity){
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ builder.setMessage(activity.getString(R.string.stream_expose_password))
+ .setPositiveButton(activity.getString(R.string.common_yes),
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(uri));
+ activity.startActivity(i);
+ }
+ })
+ .setNegativeButton(activity.getString(R.string.common_no), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User cancelled the dialog
+ }
+ });
+ return builder;
+ }
+
/**
createWifiLock(WifiManager.WIFI_MODE_FULL, MEDIA_WIFI_LOCK_TAG);
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+ mNotificationBuilder = new NotificationCompat.Builder(this);
+ mNotificationBuilder.setColor(this.getResources().getColor(R.color.primary));
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mBinder = new MediaServiceBinder(this);
}
mState = State.PLAYING;
setUpAsForeground(String.format(getString(R.string.media_state_playing), mFile.getFileName()));
configAndStartMediaPlayer();
-
}
}
releaseResources(false); // release everything except MediaPlayer
try {
- if (mFile == null) {
- Toast.makeText(this, R.string.media_err_nothing_to_play, Toast.LENGTH_LONG).show();
- processStopRequest(true);
- return;
-
- } else if (mAccount == null) {
+ if (mAccount == null) {
Toast.makeText(this, R.string.media_err_not_in_owncloud, Toast.LENGTH_LONG).show();
processStopRequest(true);
return;
createMediaPlayerIfNeeded();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
String url = mFile.getStoragePath();
- /* Streaming is not possible right now
+
if (url == null || url.length() <= 0) {
url = AccountUtils.constructFullURLForAccount(this, mAccount) + mFile.getRemotePath();
}
mIsStreaming = url.startsWith("http:") || url.startsWith("https:");
- */
+
mIsStreaming = false;
mPlayer.setDataSource(url);
Log_OC.e(TAG, "IllegalArgumentException " + mAccount.name + mFile.getRemotePath(), e);
Toast.makeText(this, String.format(getString(R.string.media_err_unexpected), mFile.getFileName()), Toast.LENGTH_LONG).show();
processStopRequest(true);
+ } catch (AccountUtils.AccountNotFoundException e) {
+ e.printStackTrace();
}
}
/**
* Updates the status notification
*/
- @SuppressWarnings("deprecation")
private void updateNotification(String content) {
+ String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
+
// TODO check if updating the Intent is really necessary
Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, mFile);
showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount);
showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
- (int)System.currentTimeMillis(),
- showDetailsIntent,
- PendingIntent.FLAG_UPDATE_CURRENT);
- mNotification.when = System.currentTimeMillis();
- //mNotification.contentView.setTextViewText(R.id.status_text, content);
- String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
- mNotification.setLatestEventInfo(getApplicationContext(), ticker, content, mNotification.contentIntent);
- mNotificationManager.notify(R.string.media_notif_ticker, mNotification);
+
+ mNotificationBuilder.setContentIntent(PendingIntent.getActivity(getApplicationContext(),
+ (int) System.currentTimeMillis(),
+ showDetailsIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT));
+ mNotificationBuilder.setWhen(System.currentTimeMillis());
+ mNotificationBuilder.setTicker(ticker);
+ mNotificationBuilder.setContentTitle(ticker);
+ mNotificationBuilder.setContentText(content);
+
+ mNotificationManager.notify(R.string.media_notif_ticker, mNotificationBuilder.build());
}
*
* A notification must be created to keep the user aware of the existance of the service.
*/
- @SuppressWarnings("deprecation")
private void setUpAsForeground(String content) {
+ String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
+
/// creates status notification
// TODO put a progress bar to follow the playback progress
- mNotification = new Notification();
- mNotification.icon = android.R.drawable.ic_media_play;
+ mNotificationBuilder.setSmallIcon(R.drawable.ic_play_arrow);
//mNotification.tickerText = text;
- mNotification.when = System.currentTimeMillis();
- mNotification.flags |= Notification.FLAG_ONGOING_EVENT;
- //mNotification.contentView.setTextViewText(R.id.status_text, "ownCloud Music Player"); // NULL POINTER
- //mNotification.contentView.setTextViewText(R.id.status_text, getString(R.string.downloader_download_in_progress_content));
-
+ mNotificationBuilder.setWhen(System.currentTimeMillis());
+ mNotificationBuilder.setOngoing(true);
/// includes a pending intent in the notification showing the details view of the file
Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, mFile);
showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount);
showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
- (int)System.currentTimeMillis(),
- showDetailsIntent,
- PendingIntent.FLAG_UPDATE_CURRENT);
-
-
- //mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotification);
- String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
- mNotification.setLatestEventInfo(getApplicationContext(), ticker, content, mNotification.contentIntent);
- startForeground(R.string.media_notif_ticker, mNotification);
-
+ mNotificationBuilder.setContentIntent(PendingIntent.getActivity(getApplicationContext(),
+ (int) System.currentTimeMillis(),
+ showDetailsIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT));
+ mNotificationBuilder.setContentTitle(ticker);
+ mNotificationBuilder.setContentText(content);
+
+ startForeground(R.string.media_notif_ticker, mNotificationBuilder.build());
}
/**
mState = State.STOPPED;
releaseResources(true);
giveUpAudioFocus();
+ stopForeground(true);
super.onDestroy();
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
return new NotificationBuilderWithProgressBar(context);
} else {
- return new NotificationCompat.Builder(context);
+ return new NotificationCompat.Builder(context).
+ setColor(context.getResources().getColor(R.color.primary));
}
}
--- /dev/null
+/* ownCloud Android client application
+ * Copyright (C) 2012-2014 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+import android.accounts.Account;
+import android.content.Context;
+
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.resources.files.CopyRemoteFileOperation;
+import com.owncloud.android.operations.common.SyncOperation;
+
+
+/**
+ * Operation copying an {@link OCFile} to a different folder.
+ *
+ * @author David A. Velasco
+ */
+public class CopyFileOperation extends SyncOperation {
+
+ //private static final String TAG = MoveFileOperation.class.getSimpleName();
+
+ private String mSrcPath;
+ private String mTargetParentPath;
+
+ private OCFile mFile;
+
+
+ /**
+ * Constructor
+ *
+ * @param srcPath Remote path of the {@link OCFile} to move.
+ * @param targetParentPath Path to the folder where the file will be copied into.
+ * @param account OwnCloud account containing both the file and the target folder
+ */
+ public CopyFileOperation(String srcPath, String targetParentPath, Account account) {
+ mSrcPath = srcPath;
+ mTargetParentPath = targetParentPath;
+ if (!mTargetParentPath.endsWith(OCFile.PATH_SEPARATOR)) {
+ mTargetParentPath += OCFile.PATH_SEPARATOR;
+ }
+
+ mFile = null;
+ }
+
+ /**
+ * Performs the operation.
+ *
+ * @param client Client object to communicate with the remote ownCloud server.
+ */
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ RemoteOperationResult result;
+
+ /// 1. check copy validity
+ if (mTargetParentPath.startsWith(mSrcPath)) {
+ return new RemoteOperationResult(ResultCode.INVALID_COPY_INTO_DESCENDANT);
+ }
+ mFile = getStorageManager().getFileByPath(mSrcPath);
+ if (mFile == null) {
+ return new RemoteOperationResult(ResultCode.FILE_NOT_FOUND);
+ }
+
+ /// 2. remote copy
+ String targetPath = mTargetParentPath + mFile.getFileName();
+ if (mFile.isFolder()) {
+ targetPath += OCFile.PATH_SEPARATOR;
+ }
+ CopyRemoteFileOperation operation = new CopyRemoteFileOperation(
+ mSrcPath,
+ targetPath,
+ false
+ );
+ result = operation.execute(client);
+
+ /// 3. local copy
+ if (result.isSuccess()) {
+ getStorageManager().copyLocalFile(mFile, targetPath);
+ }
+ // TODO handle ResultCode.PARTIAL_COPY_DONE in client Activity, for the moment
+
+ return result;
+ }
+
+
+}
Log_OC.d(TAG, "Create directory " + mRemotePath + " in Database");
}
}
+
+ public String getRemotePath() {
+ return mRemotePath;
+ }
}
+++ /dev/null
-/**
- * ownCloud Android client application
- *
- * @author masensio
- * Copyright (C) 2015 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * 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 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/>.
- *
- */
-
-package com.owncloud.android.operations;
-
-/**
- * Creates a new share from a given file
- */
-
-import android.content.Context;
-import android.content.Intent;
-
-import com.owncloud.android.R;
-import com.owncloud.android.datamodel.FileDataStorageManager;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.resources.shares.OCShare;
-import com.owncloud.android.lib.common.operations.RemoteOperation;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
-import com.owncloud.android.lib.resources.shares.ShareType;
-import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation;
-import com.owncloud.android.lib.resources.files.FileUtils;
-import com.owncloud.android.operations.common.SyncOperation;
-
-public class CreateShareOperation extends SyncOperation {
-
- private static final String TAG = CreateShareOperation.class.getSimpleName();
-
- protected FileDataStorageManager mStorageManager;
-
- private Context mContext;
- private String mPath;
- private ShareType mShareType;
- private String mShareWith;
- private boolean mPublicUpload;
- private String mPassword;
- private int mPermissions;
- private Intent mSendIntent;
-
- /**
- * Constructor
- * @param context The context that the share is coming from.
- * @param path Full path of the file/folder being shared. Mandatory argument
- * @param shareType 0 = user, 1 = group, 3 = Public link. Mandatory argument
- * @param shareWith User/group ID with who the file should be shared.
- * This is mandatory for shareType of 0 or 1
- * @param publicUpload If false (default) public cannot upload to a public shared folder.
- * If true public can upload to a shared folder.
- * Only available for public link shares
- * @param password Password to protect a public link share.
- * Only available for public link shares
- * @param permissions 1 - Read only - Default for public shares
- * 2 - Update
- * 4 - Create
- * 8 - Delete
- * 16- Re-share
- * 31- All above - Default for private shares
- * For user or group shares.
- * To obtain combinations, add the desired values together.
- * For instance, for Re-Share, delete, read, update, add 16+8+2+1 = 27.
- */
- public CreateShareOperation(Context context, String path, ShareType shareType, String shareWith,
- boolean publicUpload, String password, int permissions,
- Intent sendIntent) {
-
- mContext = context;
- mPath = path;
- mShareType = shareType;
- mShareWith = shareWith;
- mPublicUpload = publicUpload;
- mPassword = password;
- mPermissions = permissions;
- mSendIntent = sendIntent;
- }
-
- @Override
- protected RemoteOperationResult run(OwnCloudClient client) {
- RemoteOperation operation = null;
-
- // Check if the share link already exists
- operation = new GetRemoteSharesForFileOperation(mPath, false, false);
- RemoteOperationResult result =
- ((GetRemoteSharesForFileOperation)operation).execute(client);
-
- if (!result.isSuccess() || result.getData().size() <= 0) {
- operation = new CreateRemoteShareOperation(mPath, mShareType, mShareWith, mPublicUpload,
- mPassword, mPermissions);
- result = ((CreateRemoteShareOperation)operation).execute(client);
- }
-
- if (result.isSuccess()) {
- if (result.getData().size() > 0) {
- OCShare share = (OCShare) result.getData().get(0);
- updateData(share);
- }
- }
-
- return result;
- }
-
- public String getPath() {
- return mPath;
- }
-
- public ShareType getShareType() {
- return mShareType;
- }
-
- public String getShareWith() {
- return mShareWith;
- }
-
- public boolean getPublicUpload() {
- return mPublicUpload;
- }
-
- public String getPassword() {
- return mPassword;
- }
-
- public int getPermissions() {
- return mPermissions;
- }
-
- public Intent getSendIntent() {
- return mSendIntent;
- }
-
- private void updateData(OCShare share) {
- // Update DB with the response
- share.setPath(mPath);
- if (mPath.endsWith(FileUtils.PATH_SEPARATOR)) {
- share.setIsFolder(true);
- } else {
- share.setIsFolder(false);
- }
- share.setPermissions(mPermissions);
-
- getStorageManager().saveShare(share);
-
- // Update OCFile with data from share: ShareByLink and publicLink
- OCFile file = getStorageManager().getFileByPath(mPath);
- if (file!=null) {
- mSendIntent.putExtra(Intent.EXTRA_TEXT, share.getShareLink());
- if (getClient().getCredentials().getUsername() == null) {
- //in saml is null
- mSendIntent.putExtra(Intent.EXTRA_SUBJECT,
- String.format(mContext.getString(R.string.saml_subject_token),
- file.getFileName()));
- } else {
- mSendIntent.putExtra(Intent.EXTRA_SUBJECT,
- String.format(mContext.getString(R.string.subject_token),
- getClient().getCredentials().getUsername(), file.getFileName()));
- }
- file.setPublicLink(share.getShareLink());
- file.setShareByLink(true);
- getStorageManager().saveFile(file);
- Log_OC.d(TAG, "Public Link = " + file.getPublicLink());
-
- }
- }
-
-}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+/**
+ * Creates a new public share for a given file
+ */
+
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation;
+import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.operations.common.SyncOperation;
+
+import java.util.ArrayList;
+
+public class CreateShareViaLinkOperation extends SyncOperation {
+
+ private String mPath;
+ private String mPassword;
+ private Intent mSendIntent;
+ private String mFileName;
+
+ /**
+ * Constructor
+ * @param path Full path of the file/folder being shared. Mandatory argument
+ * @param password Password to protect a public link share.
+ * Only available for public link shares
+ * @param sendIntent Optional Intent with the information of an app where the link to the new share (if public)
+ * should be posted later.
+ */
+ public CreateShareViaLinkOperation(
+ String path,
+ String password,
+ Intent sendIntent
+ ) {
+
+ mPath = path;
+ mPassword = password;
+ mSendIntent = sendIntent;
+ mFileName = null;
+ }
+
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ // Check if the share link already exists
+ RemoteOperation operation = new GetRemoteSharesForFileOperation(mPath, false, false);
+ RemoteOperationResult result = operation.execute(client);
+
+ boolean shareByLink = false;
+ // Check if the file is shared by link
+ if (result.isSuccess() && result.getData().size() > 0){
+ ArrayList<Object> shares = result.getData();
+ for(Object object: shares){
+ if (((OCShare) object).getShareType() == ShareType.PUBLIC_LINK){
+ shareByLink = true;
+ break;
+ }
+ }
+ }
+
+ if (!result.isSuccess() || !shareByLink) {
+ CreateRemoteShareOperation createOp = new CreateRemoteShareOperation(
+ mPath,
+ ShareType.PUBLIC_LINK,
+ "",
+ false,
+ mPassword,
+ OCShare.DEFAULT_PERMISSION
+ );
+ createOp.setGetShareDetails(true);
+ result = createOp.execute(client);
+ }
+
+ if (result.isSuccess()) {
+ if (result.getData().size() > 0) {
+ OCShare share = (OCShare) result.getData().get(0);
+ updateData(share);
+ }
+ }
+
+ return result;
+ }
+
+ public String getPath() {
+ return mPath;
+ }
+
+ public String getPassword() {
+ return mPassword;
+ }
+
+ public Intent getSendIntent() {
+ return mSendIntent;
+ }
+
+ public Intent getSendIntentWithSubject(Context context) {
+ if (context != null && mSendIntent != null && mSendIntent.getStringExtra(Intent.EXTRA_SUBJECT) != null) {
+ if (getClient() == null || getClient().getCredentials() == null ||
+ getClient().getCredentials().getUsername() == null) {
+ mSendIntent.putExtra(
+ Intent.EXTRA_SUBJECT,
+ context.getString(R.string.subject_shared_with_you, mFileName)
+ );
+ } else {
+ mSendIntent.putExtra(
+ Intent.EXTRA_SUBJECT,
+ context.getString(
+ R.string.subject_user_shared_with_you,
+ getClient().getCredentials().getUsername(),
+ mFileName
+ )
+ );
+ }
+ }
+ return mSendIntent;
+ }
+
+ private void updateData(OCShare share) {
+ // Update DB with the response
+ share.setPath(mPath);
+ if (mPath.endsWith(FileUtils.PATH_SEPARATOR)) {
+ share.setIsFolder(true);
+ } else {
+ share.setIsFolder(false);
+ }
+
+ getStorageManager().saveShare(share);
+
+ // Update OCFile with data from share: ShareByLink and publicLink
+ OCFile file = getStorageManager().getFileByPath(mPath);
+ if (file!=null) {
+ file.setPublicLink(share.getShareLink());
+ file.setShareViaLink(true);
+ getStorageManager().saveFile(file);
+ if (mSendIntent != null) {
+ mSendIntent.putExtra(Intent.EXTRA_TEXT, share.getShareLink());
+ }
+ }
+ }
+
+}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+/**
+ * Creates a new private share for a given file
+ */
+
+
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.operations.common.SyncOperation;
+
+public class CreateShareWithShareeOperation extends SyncOperation {
+
+ protected FileDataStorageManager mStorageManager;
+
+ private String mPath;
+ private String mShareeName;
+ private ShareType mShareType;
+
+ /**
+ * Constructor.
+ *
+ * @param path Full path of the file/folder being shared.
+ * @param shareeName User or group name of the target sharee.
+ * @param shareType Type of share determines type of sharee; {@link ShareType#USER} and {@link ShareType#GROUP}
+ * are the only valid values for the moment.
+ */
+ public CreateShareWithShareeOperation(String path, String shareeName, ShareType shareType) {
+ if (!ShareType.USER.equals(shareType) && !ShareType.GROUP.equals(shareType)) {
+ throw new IllegalArgumentException("Illegal share type " + shareType);
+ }
+ mPath = path;
+ mShareeName = shareeName;
+ mShareType = shareType;
+ }
+
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ // Check if the share link already exists
+ // TODO or not
+ /*
+ RemoteOperation operation = new GetRemoteSharesForFileOperation(mPath, false, false);
+ RemoteOperationResult result = operation.execute(client);
+ if (!result.isSuccess() || result.getData().size() <= 0) {
+ */
+
+ CreateRemoteShareOperation operation = new CreateRemoteShareOperation(
+ mPath,
+ mShareType,
+ mShareeName,
+ false,
+ "",
+ OCShare.DEFAULT_PERMISSION
+ );
+ operation.setGetShareDetails(true);
+ RemoteOperationResult result = operation.execute(client);
+
+
+ if (result.isSuccess()) {
+ if (result.getData().size() > 0) {
+ OCShare share = (OCShare) result.getData().get(0);
+ updateData(share);
+ }
+ }
+
+ return result;
+ }
+
+ public String getPath() {
+ return mPath;
+ }
+
+ private void updateData(OCShare share) {
+ // Update DB with the response
+ share.setPath(mPath);
+ share.setIsFolder(mPath.endsWith(FileUtils.PATH_SEPARATOR));
+
+ getStorageManager().saveShare(share);
+
+ // Update OCFile with data from share: ShareByLink and publicLink
+ OCFile file = getStorageManager().getFileByPath(mPath);
+ if (file!=null) {
+ file.setShareWithSharee(true); // TODO - this should be done by the FileContentProvider, as part of getStorageManager().saveShare(share)
+ getStorageManager().saveFile(file);
+ }
+ }
+
+}
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
-import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.OwnCloudClient;
private OCFile mFile;
private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
private long mModificationTimestamp = 0;
+ private String mEtag = "";
private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
private DownloadRemoteFileOperation mDownloadOperation;
mFile.getModificationTimestamp();
}
+ public String getEtag() {
+ return mEtag;
+ }
+
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
- RemoteOperationResult result = null;
- File newFile = null;
- boolean moved = true;
+ RemoteOperationResult result;
+ File newFile;
+ boolean moved;
/// download will be performed to a temporal file, then moved to the final location
File tmpFile = new File(getTmpPath());
if (result.isSuccess()) {
mModificationTimestamp = mDownloadOperation.getModificationTimestamp();
+ mEtag = mDownloadOperation.getEtag();
newFile = new File(getSavePath());
newFile.getParentFile().mkdirs();
moved = tmpFile.renameTo(newFile);
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+package com.owncloud.android.operations;
+
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.resources.status.GetRemoteCapabilitiesOperation;
+import com.owncloud.android.lib.resources.status.OCCapability;
+import com.owncloud.android.operations.common.SyncOperation;
+
+/**
+ * Get and save capabilities from the server
+ */
+public class GetCapabilitiesOperarion extends SyncOperation {
+
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ GetRemoteCapabilitiesOperation getCapabilities = new GetRemoteCapabilitiesOperation();
+ RemoteOperationResult result = getCapabilities.execute(client);
+
+ if (result.isSuccess()){
+ // Read data from the result
+ if( result.getData()!= null && result.getData().size() > 0) {
+ OCCapability capability = (OCCapability) result.getData().get(0);
+
+ // Save the capabilities into database
+ getStorageManager().saveCapabilities(capability);
+ }
+ }
+
+ return result;
+ }
+
+}
package com.owncloud.android.operations;
-import java.util.ArrayList;
-
-import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
+import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.operations.common.SyncOperation;
+import java.util.ArrayList;
+
/**
* Provide a list shares for a specific file.
*/
}
getStorageManager().saveSharesDB(shares);
+
+ } else if (result.getCode() == RemoteOperationResult.ResultCode.SHARE_NOT_FOUND) {
+ // no share on the file - remove local shares
+ getStorageManager().removeSharesForFile(mPath);
+
}
return result;
+++ /dev/null
-/**
- * ownCloud Android client application
- *
- * @author masensio
- * @author David A. Velasco
- * Copyright (C) 2015 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * 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 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/>.
- *
- */
-
-package com.owncloud.android.operations;
-
-import java.util.ArrayList;
-
-import com.owncloud.android.MainApp;
-import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.shares.OCShare;
-import com.owncloud.android.lib.resources.shares.GetRemoteSharesOperation;
-import com.owncloud.android.operations.common.SyncOperation;
-
-/**
- * Access to remote operation to get the share files/folders
- * Save the data in Database
- */
-
-public class GetSharesOperation extends SyncOperation {
-
- private static final String TAG = GetSharesOperation.class.getSimpleName();
-
- @Override
- protected RemoteOperationResult run(OwnCloudClient client) {
- GetRemoteSharesOperation operation = new GetRemoteSharesOperation();
- RemoteOperationResult result = operation.execute(client);
-
- if (result.isSuccess()) {
-
- // Update DB with the response
- Log_OC.d(TAG, "Share list size = " + result.getData().size());
- ArrayList<OCShare> shares = new ArrayList<OCShare>();
- for(Object obj: result.getData()) {
- shares.add((OCShare) obj);
- }
-
- getStorageManager().saveSharesDB(shares);
- }
-
- return result;
- }
-
-}
package com.owncloud.android.operations;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
-import org.apache.http.HttpStatus;
import android.accounts.Account;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
-//import android.support.v4.content.LocalBroadcastManager;
-import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
-import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation;
import com.owncloud.android.lib.resources.files.RemoteFile;
/** 'True' means that Etag will be ignored */
private boolean mIgnoreETag;
-
+ private List<SynchronizeFileOperation> mFilesToSyncContents;
+ // this will be used for every file when 'folder synchronization' replaces 'folder download'
+
+
/**
* Creates a new instance of {@link RefreshFolderOperation}.
*
mForgottenLocalFiles = new HashMap<String, String>();
mRemoteFolderChanged = false;
mIgnoreETag = ignoreETag;
+ mFilesToSyncContents = new Vector<SynchronizeFileOperation>();
}
mConflictsFound = 0;
mForgottenLocalFiles.clear();
- if (FileUtils.PATH_SEPARATOR.equals(mLocalFolder.getRemotePath()) && !mSyncFullAccount) {
+ if (OCFile.ROOT_PATH.equals(mLocalFolder.getRemotePath()) && !mSyncFullAccount) {
updateOCVersion(client);
+
}
result = checkForChanges(client);
if (mRemoteFolderChanged) {
result = fetchAndSyncRemoteFolder(client);
} else {
- // TODO Enable when "On Device" is recovered ?
- mChildren = mStorageManager.getFolderContent(mLocalFolder/*, false*/);
+ fetchFavoritesToSyncFromLocalData();
+ mChildren = mStorageManager.getFolderContent(mLocalFolder, false);
+ }
+
+ if (result.isSuccess()) {
+ // request for the synchronization of KEPT-IN-SYNC file contents
+ startContentSynchronizations(mFilesToSyncContents, client);
}
}
RemoteOperationResult result = update.execute(client);
if (result.isSuccess()) {
mIsShareSupported = update.getOCVersion().isSharedSupported();
+
+ // Update Capabilities for this account
+ if (update.getOCVersion().isVersionWithCapabilitiesAPI()) {
+ updateCapabilities(client);
+ } else {
+ Log_OC.d(TAG, "Capabilities API disabled");
+ }
+ }
+ }
+
+ private void updateCapabilities(OwnCloudClient client){
+ GetCapabilitiesOperarion getCapabilities = new GetCapabilitiesOperarion();
+ RemoteOperationResult result = getCapabilities.execute(mStorageManager,mContext);
+ if (!result.isSuccess()){
+ Log_OC.w(TAG, "Update Capabilities unsuccessfully");
}
}
-
private RemoteOperationResult checkForChanges(OwnCloudClient client) {
mRemoteFolderChanged = true;
RemoteOperationResult result = null;
- String remotePath = null;
+ String remotePath = mLocalFolder.getRemotePath();
- remotePath = mLocalFolder.getRemotePath();
Log_OC.d(TAG, "Checking changes in " + mAccount.name + remotePath);
// remote request
if (!mIgnoreETag) {
// check if remote and local folder are different
- mRemoteFolderChanged =
- !(remoteFolder.getEtag().equalsIgnoreCase(mLocalFolder.getEtag()));
+ String remoteFolderETag = remoteFolder.getEtag();
+ if (remoteFolderETag != null) {
+ mRemoteFolderChanged =
+ !(remoteFolderETag.equalsIgnoreCase(mLocalFolder.getEtag()));
+ } else {
+ Log_OC.e(TAG, "Checked " + mAccount.name + remotePath + " : " +
+ "No ETag received from server");
+ }
}
result = new RemoteOperationResult(ResultCode.OK);
- Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " +
+ Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " +
(mRemoteFolderChanged ? "changed" : "not changed"));
} else {
mLocalFolder = mStorageManager.getFileByPath(mLocalFolder.getRemotePath());
// parse data from remote folder
- OCFile remoteFolder = fillOCFile((RemoteFile)folderAndFiles.get(0));
+ OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) folderAndFiles.get(0));
remoteFolder.setParentId(mLocalFolder.getParentId());
remoteFolder.setFileId(mLocalFolder.getFileId());
- Log_OC.d(TAG, "Remote folder " + mLocalFolder.getRemotePath()
+ Log_OC.d(TAG, "Remote folder " + mLocalFolder.getRemotePath()
+ " changed - starting update of local data ");
List<OCFile> updatedFiles = new Vector<OCFile>(folderAndFiles.size() - 1);
- List<SynchronizeFileOperation> filesToSyncContents = new Vector<SynchronizeFileOperation>();
+ mFilesToSyncContents.clear();
// get current data about local contents of the folder to synchronize
- // TODO Enable when "On Device" is recovered ?
- List<OCFile> localFiles = mStorageManager.getFolderContent(mLocalFolder/*, false*/);
+ List<OCFile> localFiles = mStorageManager.getFolderContent(mLocalFolder, false);
Map<String, OCFile> localFilesMap = new HashMap<String, OCFile>(localFiles.size());
for (OCFile file : localFiles) {
localFilesMap.put(file.getRemotePath(), file);
}
// loop to update every child
- OCFile remoteFile = null, localFile = null;
+ OCFile remoteFile = null, localFile = null, updatedFile = null;
+ RemoteFile r;
for (int i=1; i<folderAndFiles.size(); i++) {
/// new OCFile instance with the data from the server
- remoteFile = fillOCFile((RemoteFile)folderAndFiles.get(i));
- remoteFile.setParentId(mLocalFolder.getFileId());
+ r = (RemoteFile) folderAndFiles.get(i);
+ remoteFile = FileStorageUtils.fillOCFile(r);
+
+ /// new OCFile instance to merge fresh data from server with local state
+ updatedFile = FileStorageUtils.fillOCFile(r);
+ updatedFile.setParentId(mLocalFolder.getFileId());
/// retrieve local data for the read file
// localFile = mStorageManager.getFileByPath(remoteFile.getRemotePath());
localFile = localFilesMap.remove(remoteFile.getRemotePath());
- /// add to the remoteFile (the new one) data about LOCAL STATE (not existing in server)
- remoteFile.setLastSyncDateForProperties(mCurrentSyncTime);
+ /// add to updatedFile data about LOCAL STATE (not existing in server)
+ updatedFile.setLastSyncDateForProperties(mCurrentSyncTime);
if (localFile != null) {
- // some properties of local state are kept unmodified
- remoteFile.setFileId(localFile.getFileId());
- remoteFile.setFavorite(localFile.isFavorite());
- remoteFile.setLastSyncDateForData(localFile.getLastSyncDateForData());
- remoteFile.setModificationTimestampAtLastSyncForData(
+ updatedFile.setFileId(localFile.getFileId());
+ updatedFile.setFavorite(localFile.isFavorite());
+ updatedFile.setLastSyncDateForData(localFile.getLastSyncDateForData());
+ updatedFile.setModificationTimestampAtLastSyncForData(
localFile.getModificationTimestampAtLastSyncForData()
);
- remoteFile.setStoragePath(localFile.getStoragePath());
- // eTag will not be updated unless contents are synchronized
- // (Synchronize[File|Folder]Operation with remoteFile as parameter)
- remoteFile.setEtag(localFile.getEtag());
- if (remoteFile.isFolder()) {
- remoteFile.setFileLength(localFile.getFileLength());
+ updatedFile.setStoragePath(localFile.getStoragePath());
+ // eTag will not be updated unless file CONTENTS are synchronized
+ updatedFile.setEtag(localFile.getEtag());
+ if (updatedFile.isFolder()) {
+ updatedFile.setFileLength(localFile.getFileLength());
// TODO move operations about size of folders to FileContentProvider
} else if (mRemoteFolderChanged && remoteFile.isImage() &&
remoteFile.getModificationTimestamp() !=
localFile.getModificationTimestamp()) {
- remoteFile.setNeedsUpdateThumbnail(true);
+ updatedFile.setNeedsUpdateThumbnail(true);
Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
}
- remoteFile.setPublicLink(localFile.getPublicLink());
- remoteFile.setShareByLink(localFile.isShareByLink());
+ updatedFile.setPublicLink(localFile.getPublicLink());
+ updatedFile.setShareViaLink(localFile.isSharedViaLink());
+ updatedFile.setShareWithSharee(localFile.isSharedWithSharee());
+ updatedFile.setEtagInConflict(localFile.getEtagInConflict());
} else {
- // remote eTag will not be updated unless contents are synchronized
- // (Synchronize[File|Folder]Operation with remoteFile as parameter)
- remoteFile.setEtag("");
+ // remote eTag will not be updated unless file CONTENTS are synchronized
+ updatedFile.setEtag("");
}
/// check and fix, if needed, local storage path
- checkAndFixForeignStoragePath(remoteFile); // policy - local files are COPIED
- // into the ownCloud local folder;
- searchForLocalFileInDefaultPath(remoteFile); // legacy
+ FileStorageUtils.searchForLocalFileInDefaultPath(updatedFile, mAccount);
/// prepare content synchronization for kept-in-sync files
- if (remoteFile.isFavorite()) {
+ if (updatedFile.isFavorite()) {
SynchronizeFileOperation operation = new SynchronizeFileOperation( localFile,
remoteFile,
mAccount,
mContext
);
- filesToSyncContents.add(operation);
+ mFilesToSyncContents.add(operation);
}
-
- updatedFiles.add(remoteFile);
+
+ updatedFiles.add(updatedFile);
}
// save updated contents in local database
mStorageManager.saveFolder(remoteFolder, updatedFiles, localFilesMap.values());
- // request for the synchronization of file contents AFTER saving current remote properties
- startContentSynchronizations(filesToSyncContents, client);
-
mChildren = updatedFiles;
}
}
- public boolean isMultiStatus(int status) {
- return (status == HttpStatus.SC_MULTI_STATUS);
- }
-
/**
- * 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).
- * @return New OCFile instance representing the remote resource described by we.
+ * Syncs the Share resources for the files contained in the folder refreshed (children, not deeper descendants).
+ *
+ * @param client Handler of a session with an OC server.
+ * @return The result of the remote operation retrieving the Share resources in the folder refreshed by
+ * the operation.
*/
- private OCFile fillOCFile(RemoteFile remote) {
- OCFile file = new OCFile(remote.getRemotePath());
- file.setCreationTimestamp(remote.getCreationTimestamp());
- file.setFileLength(remote.getLength());
- file.setMimetype(remote.getMimeType());
- file.setModificationTimestamp(remote.getModifiedTimestamp());
- file.setEtag(remote.getEtag());
- file.setPermissions(remote.getPermissions());
- file.setRemoteId(remote.getRemoteId());
- return file;
- }
-
-
- /**
- * Checks the storage path of the OCFile received as parameter.
- * If it's out of the local ownCloud folder, tries to copy the file inside it.
- *
- * If the copy fails, the link to the local file is nullified. The account of forgotten
- * files is kept in {@link #mForgottenLocalFiles}
- *)
- * @param file File to check and fix.
- */
- private void checkAndFixForeignStoragePath(OCFile file) {
- String storagePath = file.getStoragePath();
- String expectedPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file);
- if (storagePath != null && !storagePath.equals(expectedPath)) {
- /// fix storagePaths out of the local ownCloud folder
- File originalFile = new File(storagePath);
- if (FileStorageUtils.getUsableSpace(mAccount.name) < originalFile.length()) {
- mForgottenLocalFiles.put(file.getRemotePath(), storagePath);
- file.setStoragePath(null);
-
- } else {
- InputStream in = null;
- OutputStream out = null;
- try {
- File expectedFile = new File(expectedPath);
- File expectedParent = expectedFile.getParentFile();
- expectedParent.mkdirs();
- if (!expectedParent.isDirectory()) {
- throw new IOException(
- "Unexpected error: parent directory could not be created"
- );
- }
- expectedFile.createNewFile();
- if (!expectedFile.isFile()) {
- throw new IOException("Unexpected error: target file could not be created");
- }
- in = new FileInputStream(originalFile);
- out = new FileOutputStream(expectedFile);
- byte[] buf = new byte[1024];
- int len;
- while ((len = in.read(buf)) > 0){
- out.write(buf, 0, len);
- }
- file.setStoragePath(expectedPath);
-
- } catch (Exception e) {
- Log_OC.e(TAG, "Exception while copying foreign file " + expectedPath, e);
- mForgottenLocalFiles.put(file.getRemotePath(), storagePath);
- file.setStoragePath(null);
-
- } finally {
- try {
- if (in != null) in.close();
- } catch (Exception e) {
- Log_OC.d(TAG, "Weird exception while closing input stream for "
- + storagePath + " (ignoring)", e);
- }
- try {
- if (out != null) out.close();
- } catch (Exception e) {
- Log_OC.d(TAG, "Weird exception while closing output stream for "
- + expectedPath + " (ignoring)", e);
- }
- }
- }
- }
- }
-
-
private RemoteOperationResult refreshSharesForFolder(OwnCloudClient client) {
RemoteOperationResult result = null;
// remote request
GetRemoteSharesForFileOperation operation =
- new GetRemoteSharesForFileOperation(mLocalFolder.getRemotePath(), false, true);
+ new GetRemoteSharesForFileOperation(mLocalFolder.getRemotePath(), true, true);
result = operation.execute(client);
if (result.isSuccess()) {
/**
- * Scans the default location for saving local copies of files searching for
- * a 'lost' file with the same full name as the {@link OCFile} received as
- * parameter.
- *
- * @param file File to associate a possible 'lost' local file.
- */
- private void searchForLocalFileInDefaultPath(OCFile file) {
- if (file.getStoragePath() == null && !file.isFolder()) {
- File f = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file));
- if (f.exists()) {
- file.setStoragePath(f.getAbsolutePath());
- file.setLastSyncDateForData(f.lastModified());
- }
- }
- }
-
-
- /**
* Sends a message to any application component interested in the progress
* of the synchronization.
*
}
- public boolean getRemoteFolderChanged() {
- return mRemoteFolderChanged;
+ private void fetchFavoritesToSyncFromLocalData() {
+ List<OCFile> children = mStorageManager.getFolderContent(mLocalFolder, false);
+ for (OCFile child : children) {
+ if (!child.isFolder() && child.isFavorite()) {
+ SynchronizeFileOperation operation = new SynchronizeFileOperation(
+ child,
+ child, // cheating with the remote file to get an update to server; to refactor
+ mAccount,
+ true,
+ mContext
+ );
+ mFilesToSyncContents.add(operation);
+ }
+ }
}
}
package com.owncloud.android.operations;
-import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileUploader;
/// check changes in server and local file
boolean serverChanged = false;
- /* time for eTag is coming, but not yet
- if (mServerFile.getEtag() != null) {
- serverChanged = (!mServerFile.getEtag().equals(mLocalFile.getEtag()));
- } else { */
- serverChanged = (
- mServerFile.getModificationTimestamp() !=
- mLocalFile.getModificationTimestampAtLastSyncForData()
- );
- //}
+ if (mLocalFile.getEtag() == null || mLocalFile.getEtag().length() == 0) {
+ // file uploaded (null) or downloaded ("") before upgrade to version 1.8.0; check the old condition
+ serverChanged = mServerFile.getModificationTimestamp() !=
+ mLocalFile.getModificationTimestampAtLastSyncForData();
+ } else {
+ serverChanged = (!mServerFile.getEtag().equals(mLocalFile.getEtag()));
+ }
boolean localChanged = (
mLocalFile.getLocalModificationTimestamp() > mLocalFile.getLastSyncDateForData()
);
//if (!mLocalFile.getEtag().isEmpty() && localChanged && serverChanged) {
if (localChanged && serverChanged) {
result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);
+ getStorageManager().saveConflict(mLocalFile, mServerFile.getEtag());
} else if (localChanged) {
if (mSyncFileContents && mAllowUploads) {
mServerFile.setLastSyncDateForData(mLocalFile.getLastSyncDateForData());
mServerFile.setStoragePath(mLocalFile.getStoragePath());
mServerFile.setParentId(mLocalFile.getParentId());
+ mServerFile.setEtag(mLocalFile.getEtag());
getStorageManager().saveFile(mServerFile);
}
result = new RemoteOperationResult(ResultCode.OK);
}
- }
+ // safe blanket: sync'ing a not in-conflict file will clean wrong conflict markers in ancestors
+ if (result.getCode() != ResultCode.SYNC_CONFLICT) {
+ getStorageManager().saveConflict(mLocalFile, null);
+ }
+ }
}
* Fetches the list and properties of the files contained in the given folder, including their
* properties, and updates the local database with them.
*
- * Does NOT enter in the child folders to synchronize their contents also.
+ * Does NOT enter in the child folders to synchronize their contents also, BUT requests for a new operation instance
+ * doing so.
*/
public class SynchronizeFolderOperation extends SyncOperation {
private List<OCFile> mFilesForDirectDownload;
// to avoid extra PROPFINDs when there was no change in the folder
- private List<SyncOperation> mFilesToSyncContentsWithoutUpload;
- // this will go out when 'folder synchronization' replaces 'folder download'; step by step
-
- private List<SyncOperation> mFavouriteFilesToSyncContents;
+ private List<SyncOperation> mFilesToSyncContents;
// this will be used for every file when 'folder synchronization' replaces 'folder download'
private final AtomicBoolean mCancellationRequested;
mContext = context;
mRemoteFolderChanged = false;
mFilesForDirectDownload = new Vector<OCFile>();
- mFilesToSyncContentsWithoutUpload = new Vector<SyncOperation>();
- mFavouriteFilesToSyncContents = new Vector<SyncOperation>();
+ mFilesToSyncContents = new Vector<SyncOperation>();
mCancellationRequested = new AtomicBoolean(false);
}
FileDataStorageManager storageManager = getStorageManager();
// parse data from remote folder
- OCFile remoteFolder = fillOCFile((RemoteFile)folderAndFiles.get(0));
+ OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) folderAndFiles.get(0));
remoteFolder.setParentId(mLocalFolder.getParentId());
remoteFolder.setFileId(mLocalFolder.getFileId());
List<OCFile> updatedFiles = new Vector<OCFile>(folderAndFiles.size() - 1);
mFilesForDirectDownload.clear();
- mFilesToSyncContentsWithoutUpload.clear();
- mFavouriteFilesToSyncContents.clear();
+ mFilesToSyncContents.clear();
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
}
// get current data about local contents of the folder to synchronize
- // TODO Enable when "On Device" is recovered ?
- List<OCFile> localFiles = storageManager.getFolderContent(mLocalFolder/*, false*/);
+ List<OCFile> localFiles = storageManager.getFolderContent(mLocalFolder, false);
Map<String, OCFile> localFilesMap = new HashMap<String, OCFile>(localFiles.size());
for (OCFile file : localFiles) {
localFilesMap.put(file.getRemotePath(), file);
}
// loop to synchronize every child
- OCFile remoteFile = null, localFile = null;
+ OCFile remoteFile = null, localFile = null, updatedFile = null;
+ RemoteFile r;
for (int i=1; i<folderAndFiles.size(); i++) {
/// new OCFile instance with the data from the server
- remoteFile = fillOCFile((RemoteFile)folderAndFiles.get(i));
- remoteFile.setParentId(mLocalFolder.getFileId());
+ r = (RemoteFile) folderAndFiles.get(i);
+ remoteFile = FileStorageUtils.fillOCFile(r);
+
+ /// new OCFile instance to merge fresh data from server with local state
+ updatedFile = FileStorageUtils.fillOCFile(r);
+ updatedFile.setParentId(mLocalFolder.getFileId());
/// retrieve local data for the read file
// localFile = mStorageManager.getFileByPath(remoteFile.getRemotePath());
localFile = localFilesMap.remove(remoteFile.getRemotePath());
- /// add to the remoteFile (the new one) data about LOCAL STATE (not existing in server)
- remoteFile.setLastSyncDateForProperties(mCurrentSyncTime);
+ /// add to updatedFile data about LOCAL STATE (not existing in server)
+ updatedFile.setLastSyncDateForProperties(mCurrentSyncTime);
if (localFile != null) {
- // some properties of local state are kept unmodified
- remoteFile.setFileId(localFile.getFileId());
- remoteFile.setFavorite(localFile.isFavorite());
- remoteFile.setLastSyncDateForData(localFile.getLastSyncDateForData());
- remoteFile.setModificationTimestampAtLastSyncForData(
+ updatedFile.setFileId(localFile.getFileId());
+ updatedFile.setFavorite(localFile.isFavorite());
+ updatedFile.setLastSyncDateForData(localFile.getLastSyncDateForData());
+ updatedFile.setModificationTimestampAtLastSyncForData(
localFile.getModificationTimestampAtLastSyncForData()
);
- remoteFile.setStoragePath(localFile.getStoragePath());
- // eTag will not be updated unless contents are synchronized
- // (Synchronize[File|Folder]Operation with remoteFile as parameter)
- remoteFile.setEtag(localFile.getEtag());
- if (remoteFile.isFolder()) {
- remoteFile.setFileLength(localFile.getFileLength());
+ updatedFile.setStoragePath(localFile.getStoragePath());
+ // eTag will not be updated unless file CONTENTS are synchronized
+ updatedFile.setEtag(localFile.getEtag());
+ if (updatedFile.isFolder()) {
+ updatedFile.setFileLength(localFile.getFileLength());
// TODO move operations about size of folders to FileContentProvider
} else if (mRemoteFolderChanged && remoteFile.isImage() &&
remoteFile.getModificationTimestamp() !=
localFile.getModificationTimestamp()) {
- remoteFile.setNeedsUpdateThumbnail(true);
+ updatedFile.setNeedsUpdateThumbnail(true);
Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
}
- remoteFile.setPublicLink(localFile.getPublicLink());
- remoteFile.setShareByLink(localFile.isShareByLink());
+ updatedFile.setPublicLink(localFile.getPublicLink());
+ updatedFile.setShareViaLink(localFile.isSharedViaLink());
+ updatedFile.setShareWithSharee(localFile.isSharedWithSharee());
+ updatedFile.setEtagInConflict(localFile.getEtagInConflict());
} else {
- // remote eTag will not be updated unless contents are synchronized
- // (Synchronize[File|Folder]Operation with remoteFile as parameter)
- remoteFile.setEtag("");
+ // remote eTag will not be updated unless file CONTENTS are synchronized
+ updatedFile.setEtag("");
}
/// check and fix, if needed, local storage path
- searchForLocalFileInDefaultPath(remoteFile);
+ searchForLocalFileInDefaultPath(updatedFile);
/// classify file to sync/download contents later
if (remoteFile.isFolder()) {
/// to download children files recursively
- synchronized(mCancellationRequested) {
+ synchronized (mCancellationRequested) {
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
}
startSyncFolderOperation(remoteFile.getRemotePath());
}
- } else if (remoteFile.isFavorite()) {
- /// prepare content synchronization for kept-in-sync files
- SynchronizeFileOperation operation = new SynchronizeFileOperation(
- localFile,
- remoteFile,
- mAccount,
- true,
- mContext
- );
- mFavouriteFilesToSyncContents.add(operation);
-
} else {
- /// prepare limited synchronization for regular files
+ /// prepare content synchronization for files (any file, not just favorites)
SynchronizeFileOperation operation = new SynchronizeFileOperation(
localFile,
remoteFile,
mAccount,
true,
- false,
mContext
);
- mFilesToSyncContentsWithoutUpload.add(operation);
+ mFilesToSyncContents.add(operation);
+
}
- updatedFiles.add(remoteFile);
+ updatedFiles.add(updatedFile);
}
// save updated contents in local database
private void prepareOpsFromLocalKnowledge() throws OperationCancelledException {
- // TODO Enable when "On Device" is recovered ?
- List<OCFile> children = getStorageManager().getFolderContent(mLocalFolder/*, false*/);
+ List<OCFile> children = getStorageManager().getFolderContent(mLocalFolder, false);
for (OCFile child : children) {
/// classify file to sync/download contents later
if (child.isFolder()) {
}
} else {
- /// prepare limited synchronization for regular files
+ /// synchronization for regular files
if (!child.isDown()) {
mFilesForDirectDownload.add(child);
+
+ } else {
+ /// this should result in direct upload of files that were locally modified
+ SynchronizeFileOperation operation = new SynchronizeFileOperation(
+ child,
+ (child.getEtagInConflict() != null ? child : null),
+ mAccount,
+ true,
+ mContext
+ );
+ mFilesToSyncContents.add(operation);
+
}
+
}
}
}
private void syncContents(OwnCloudClient client) throws OperationCancelledException {
startDirectDownloads();
- startContentSynchronizations(mFilesToSyncContentsWithoutUpload, client);
- startContentSynchronizations(mFavouriteFilesToSyncContents, client);
+ startContentSynchronizations(mFilesToSyncContents, client);
}
/**
- * Creates and populates a new {@link com.owncloud.android.datamodel.OCFile}
- * object with the data read from the server.
- *
- * @param remote remote file read from the server (remote file or folder).
- * @return New OCFile instance representing the remote resource described by we.
- */
- private OCFile fillOCFile(RemoteFile remote) {
- OCFile file = new OCFile(remote.getRemotePath());
- file.setCreationTimestamp(remote.getCreationTimestamp());
- file.setFileLength(remote.getLength());
- file.setMimetype(remote.getMimeType());
- file.setModificationTimestamp(remote.getModifiedTimestamp());
- file.setEtag(remote.getEtag());
- file.setPermissions(remote.getPermissions());
- file.setRemoteId(remote.getRemoteId());
- return file;
- }
-
-
- /**
* Scans the default location for saving local copies of files searching for
* a 'lost' file with the same full name as the {@link com.owncloud.android.datamodel.OCFile}
* received as parameter.
+++ /dev/null
-/**
- * ownCloud Android client application
- *
- * @author masensio
- * Copyright (C) 2015 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * 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 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/>.
- *
- */
-
-package com.owncloud.android.operations;
-
-import android.content.Context;
-
-import com.owncloud.android.MainApp;
-import com.owncloud.android.datamodel.OCFile;
-
-import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
-import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
-import com.owncloud.android.lib.resources.shares.OCShare;
-import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation;
-import com.owncloud.android.lib.resources.shares.ShareType;
-
-import com.owncloud.android.operations.common.SyncOperation;
-
-/**
- * Unshare file/folder
- * Save the data in Database
- */
-public class UnshareLinkOperation extends SyncOperation {
-
- private static final String TAG = UnshareLinkOperation.class.getSimpleName();
-
- private String mRemotePath;
- private Context mContext;
-
-
- public UnshareLinkOperation(String remotePath, Context context) {
- mRemotePath = remotePath;
- mContext = context;
- }
-
- @Override
- protected RemoteOperationResult run(OwnCloudClient client) {
- RemoteOperationResult result = null;
-
- // Get Share for a file
- OCShare share = getStorageManager().getFirstShareByPathAndType(mRemotePath,
- ShareType.PUBLIC_LINK);
-
- if (share != null) {
- RemoveRemoteShareOperation operation =
- new RemoveRemoteShareOperation((int) share.getIdRemoteShared());
- result = operation.execute(client);
-
- if (result.isSuccess() || result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- Log_OC.d(TAG, "Share id = " + share.getIdRemoteShared() + " deleted");
-
- OCFile file = getStorageManager().getFileByPath(mRemotePath);
- file.setShareByLink(false);
- file.setPublicLink("");
- getStorageManager().saveFile(file);
- getStorageManager().removeShare(share);
-
- if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- if (existsFile(client, file.getRemotePath())) {
- result = new RemoteOperationResult(ResultCode.OK);
- } else {
- getStorageManager().removeFile(file, true, true);
- }
- }
- }
-
- } else {
- result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
- }
-
- return result;
- }
-
- private boolean existsFile(OwnCloudClient client, String remotePath){
- ExistenceCheckRemoteOperation existsOperation =
- new ExistenceCheckRemoteOperation(remotePath, mContext, false);
- RemoteOperationResult result = existsOperation.execute(client);
- return result.isSuccess();
- }
-
-}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+import android.content.Context;
+
+import com.owncloud.android.datamodel.OCFile;
+
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation;
+import com.owncloud.android.lib.resources.shares.ShareType;
+
+import com.owncloud.android.operations.common.SyncOperation;
+
+import java.util.ArrayList;
+
+/**
+ * Unshare file/folder
+ * Save the data in Database
+ */
+public class UnshareOperation extends SyncOperation {
+
+ private static final String TAG = UnshareOperation.class.getSimpleName();
+
+ private String mRemotePath;
+ private ShareType mShareType;
+ private String mShareWith;
+ private Context mContext;
+
+ public UnshareOperation(String remotePath, ShareType shareType, String shareWith,
+ Context context) {
+ mRemotePath = remotePath;
+ mShareType = shareType;
+ mShareWith = shareWith;
+ mContext = context;
+ }
+
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ RemoteOperationResult result = null;
+
+ // Get Share for a file
+ OCShare share = getStorageManager().getFirstShareByPathAndType(mRemotePath,
+ mShareType, mShareWith);
+
+ if (share != null) {
+ OCFile file = getStorageManager().getFileByPath(mRemotePath);
+ RemoveRemoteShareOperation operation =
+ new RemoveRemoteShareOperation((int) share.getRemoteId());
+ result = operation.execute(client);
+
+ if (result.isSuccess()) {
+ Log_OC.d(TAG, "Share id = " + share.getRemoteId() + " deleted");
+
+ if (mShareType == ShareType.PUBLIC_LINK) {
+ file.setShareViaLink(false);
+ file.setPublicLink("");
+ } else if (mShareType == ShareType.USER || mShareType == ShareType.GROUP){
+ // Check if it is the last share
+ ArrayList <OCShare> sharesWith = getStorageManager().
+ getSharesWithForAFile(mRemotePath,
+ getStorageManager().getAccount().name);
+ if (sharesWith.size() == 1) {
+ file.setShareWithSharee(false);
+ }
+ }
+
+ getStorageManager().saveFile(file);
+ getStorageManager().removeShare(share);
+
+ } else if (!existsFile(client, file.getRemotePath())) {
+ // unshare failed because file was deleted before
+ getStorageManager().removeFile(file, true, true);
+ }
+
+ } else {
+ result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
+ }
+
+ return result;
+ }
+
+ private boolean existsFile(OwnCloudClient client, String remotePath){
+ ExistenceCheckRemoteOperation existsOperation =
+ new ExistenceCheckRemoteOperation(remotePath, mContext, false);
+ RemoteOperationResult result = existsOperation.execute(client);
+ return result.isSuccess();
+ }
+
+}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.shares.GetRemoteShareOperation;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation;
+import com.owncloud.android.operations.common.SyncOperation;
+
+import java.util.Calendar;
+
+
+/**
+ * Updates an existing public share for a given file
+ */
+
+public class UpdateShareViaLinkOperation extends SyncOperation {
+
+ private String mPath;
+ private String mPassword;
+ private long mExpirationDateInMillis;
+
+ /**
+ * Constructor
+ *
+ * @param path Full path of the file/folder being shared. Mandatory argument
+ */
+ public UpdateShareViaLinkOperation(String path) {
+
+ mPath = path;
+ mPassword = null;
+ mExpirationDateInMillis = 0;
+ }
+
+
+ /**
+ * Set password to update in public link.
+ *
+ * @param password Password to set to the public link.
+ * Empty string clears the current password.
+ * Null results in no update applied to the password.
+ */
+ public void setPassword(String password) {
+ mPassword = password;
+ }
+
+
+ /**
+ * Set expiration date to update in Share resource.
+ *
+ * @param expirationDateInMillis Expiration date to set to the public link.
+ * A negative value clears the current expiration date.
+ * Zero value (start-of-epoch) results in no update done on
+ * the expiration date.
+ */
+ public void setExpirationDate(long expirationDateInMillis) {
+ mExpirationDateInMillis = expirationDateInMillis;
+ }
+
+
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+
+ OCShare publicShare = getStorageManager().getFirstShareByPathAndType(
+ mPath,
+ ShareType.PUBLIC_LINK,
+ ""
+ );
+
+ if (publicShare == null) {
+ // TODO try to get remote share before failing?
+ return new RemoteOperationResult(
+ RemoteOperationResult.ResultCode.SHARE_NOT_FOUND
+ );
+ }
+
+ // Update remote share with password
+ UpdateRemoteShareOperation udpateOp = new UpdateRemoteShareOperation(
+ publicShare.getRemoteId()
+ );
+ udpateOp.setPassword(mPassword);
+ udpateOp.setExpirationDate(mExpirationDateInMillis);
+ RemoteOperationResult result = udpateOp.execute(client);
+
+ if (result.isSuccess()) {
+ // Retrieve updated share / save directly with password? -> no; the password is not be saved
+ RemoteOperation getShareOp = new GetRemoteShareOperation(publicShare.getRemoteId());
+ result = getShareOp.execute(client);
+ if (result.isSuccess()) {
+ OCShare share = (OCShare) result.getData().get(0);
+ updateData(share);
+ }
+ }
+
+ return result;
+ }
+
+ public String getPath() {
+ return mPath;
+ }
+
+ public String getPassword() {
+ return mPassword;
+ }
+
+ private void updateData(OCShare share) {
+ // Update DB with the response
+ share.setPath(mPath);
+ if (mPath.endsWith(FileUtils.PATH_SEPARATOR)) {
+ share.setIsFolder(true);
+ } else {
+ share.setIsFolder(false);
+ }
+
+ getStorageManager().saveShare(share); // TODO info about having a password? ask to Gonzalo
+
+ // Update OCFile with data from share: ShareByLink and publicLink
+ // TODO check & remove if not needed
+ OCFile file = getStorageManager().getFileByPath(mPath);
+ if (file != null) {
+ file.setPublicLink(share.getShareLink());
+ file.setShareViaLink(true);
+ getStorageManager().saveFile(file);
+ }
+ }
+
+}
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.nio.channels.FileChannel;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.RequestEntity;
import android.accounts.Account;
import android.net.Uri;
import com.owncloud.android.MainApp;
+import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.OwnCloudClient;
private boolean mWasRenamed = false;
private String mOriginalFileName = null;
private String mOriginalStoragePath = null;
- PutMethod mPutMethod = null;
private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
private AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
private Context mContext;
(new File(mFile.getStoragePath())).length() >
ChunkedUploadRemoteFileOperation.CHUNK_SIZE ) {
mUploadOperation = new ChunkedUploadRemoteFileOperation(mFile.getStoragePath(),
- mFile.getRemotePath(), mFile.getMimetype());
+ mFile.getRemotePath(), mFile.getMimetype(), mFile.getEtagInConflict());
} else {
mUploadOperation = new UploadRemoteFileOperation(mFile.getStoragePath(),
- mFile.getRemotePath(), mFile.getMimetype());
+ mFile.getRemotePath(), mFile.getMimetype(), mFile.getEtagInConflict());
}
Iterator <OnDatatransferProgressListener> listener = mDataTransferListeners.iterator();
while (listener.hasNext()) {
mUploadOperation.addDatatransferProgressListener(listener.next());
}
- if (!mCancellationRequested.get()) {
- result = mUploadOperation.execute(client);
-
- /// move local temporal file or original file to its corresponding
- // location in the ownCloud local folder
- if (result.isSuccess()) {
- if (mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_FORGET) {
- mFile.setStoragePath(null);
-
- } else {
- mFile.setStoragePath(expectedPath);
- File fileToMove = null;
- if (temporalFile != null) { // FileUploader.LOCAL_BEHAVIOUR_COPY
- // ; see where temporalFile was
- // set
- fileToMove = temporalFile;
- } else { // FileUploader.LOCAL_BEHAVIOUR_MOVE
- fileToMove = originalFile;
- }
- if (!expectedFile.equals(fileToMove)) {
- File expectedFolder = expectedFile.getParentFile();
- expectedFolder.mkdirs();
- if (!expectedFolder.isDirectory() || !fileToMove.renameTo(expectedFile)) {
- mFile.setStoragePath(null); // forget the local file
- // by now, treat this as a success; the file was
- // uploaded; the user won't like that the local file
- // is not linked, but this should be a very rare
- // fail;
- // the best option could be show a warning message
- // (but not a fail)
- // result = new
- // RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED);
- // return result;
+ if (mCancellationRequested.get()) {
+ throw new OperationCancelledException();
+ }
+
+ result = mUploadOperation.execute(client);
+
+ /// move local temporal file or original file to its corresponding
+ // location in the ownCloud local folder
+ if (result.isSuccess()) {
+ if (mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_FORGET) {
+ mFile.setStoragePath("");
+ } else {
+ mFile.setStoragePath(expectedPath);
+ File fileToMove = null;
+ if (temporalFile != null) { // FileUploader.LOCAL_BEHAVIOUR_COPY
+ // ; see where temporalFile was
+ // set
+ fileToMove = temporalFile;
+ } else { // FileUploader.LOCAL_BEHAVIOUR_MOVE
+ fileToMove = originalFile;
+ }
+ if (!expectedFile.equals(fileToMove)) {
+ File expectedFolder = expectedFile.getParentFile();
+ expectedFolder.mkdirs();
+
+ if (expectedFolder.isDirectory()){
+ if (!fileToMove.renameTo(expectedFile)){
+ // try to copy and then delete
+ expectedFile.createNewFile();
+ FileChannel inChannel = new FileInputStream(fileToMove).getChannel();
+ FileChannel outChannel = new FileOutputStream(expectedFile).getChannel();
+
+ try {
+ inChannel.transferTo(0, inChannel.size(), outChannel);
+ fileToMove.delete();
+ } catch (Exception e){
+ mFile.setStoragePath(null); // forget the local file
+ // by now, treat this as a success; the file was
+ // uploaded; the user won't like that the local file
+ // is not linked, but this should be a very rare
+ // fail;
+ // the best option could be show a warning message
+ // (but not a fail)
+ // result = new
+ // RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED);
+ // return result;
+ }
+ finally {
+ if (inChannel != null) inChannel.close();
+ if (outChannel != null) outChannel.close();
+ }
}
+
+ } else {
+ mFile.setStoragePath(null);
}
}
}
+ FileDataStorageManager.triggerMediaScan(originalFile.getAbsolutePath());
+ FileDataStorageManager.triggerMediaScan(expectedFile.getAbsolutePath());
+ } else if (result.getHttpCode() == HttpStatus.SC_PRECONDITION_FAILED ) {
+ result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);
}
} catch (Exception e) {
- // TODO something cleaner with cancellations
- if (mCancellationRequested.get()) {
- result = new RemoteOperationResult(new OperationCancelledException());
- } else {
- result = new RemoteOperationResult(e);
- }
+ result = new RemoteOperationResult(e);
} finally {
if (temporalFile != null && !originalFile.equals(temporalFile)) {
temporalFile.delete();
}
+ if (result == null){
+ return new RemoteOperationResult(false, 404, null);
+ }
if (result.isSuccess()) {
Log_OC.i(TAG, "Upload of " + mOriginalStoragePath + " to " + mRemotePath + ": " +
result.getLogMessage());
newFile.setModificationTimestamp(mFile.getModificationTimestamp());
newFile.setModificationTimestampAtLastSyncForData(
mFile.getModificationTimestampAtLastSyncForData());
- // newFile.setEtag(mFile.getEtag())
+ newFile.setEtag(mFile.getEtag());
newFile.setFavorite(mFile.isFavorite());
newFile.setLastSyncDateForProperties(mFile.getLastSyncDateForProperties());
newFile.setLastSyncDateForData(mFile.getLastSyncDateForData());
package com.owncloud.android.operations.common;
-import com.owncloud.android.MainApp;
+import android.content.Context;
+import android.os.Handler;
+
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import android.content.Context;
-import android.os.Handler;
-
/**
* Operation which execution involves both interactions with an ownCloud server and
package com.owncloud.android.providers;
-import java.io.File;
-import java.security.Provider;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import com.owncloud.android.MainApp;
-import com.owncloud.android.R;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.ProviderMeta;
-import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
-import com.owncloud.android.lib.common.accounts.AccountUtils;
-import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.shares.ShareType;
-import com.owncloud.android.utils.FileStorageUtils;
-
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.ContentProvider;
import android.net.Uri;
import android.text.TextUtils;
+import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.db.ProviderMeta;
+import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.utils.FileStorageUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+
/**
* The ContentProvider for the ownCloud App.
*/
private DataBaseHelper mDbHelper;
- // Projection for filelist table
- private static HashMap<String, String> mFileProjectionMap;
- static {
- mFileProjectionMap = new HashMap<String, String>();
- mFileProjectionMap.put(ProviderTableMeta._ID, ProviderTableMeta._ID);
- mFileProjectionMap.put(ProviderTableMeta.FILE_PARENT,
- ProviderTableMeta.FILE_PARENT);
- mFileProjectionMap.put(ProviderTableMeta.FILE_PATH,
- ProviderTableMeta.FILE_PATH);
- mFileProjectionMap.put(ProviderTableMeta.FILE_NAME,
- ProviderTableMeta.FILE_NAME);
- mFileProjectionMap.put(ProviderTableMeta.FILE_CREATION,
- ProviderTableMeta.FILE_CREATION);
- mFileProjectionMap.put(ProviderTableMeta.FILE_MODIFIED,
- ProviderTableMeta.FILE_MODIFIED);
- mFileProjectionMap.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
- ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA);
- mFileProjectionMap.put(ProviderTableMeta.FILE_CONTENT_LENGTH,
- ProviderTableMeta.FILE_CONTENT_LENGTH);
- mFileProjectionMap.put(ProviderTableMeta.FILE_CONTENT_TYPE,
- ProviderTableMeta.FILE_CONTENT_TYPE);
- mFileProjectionMap.put(ProviderTableMeta.FILE_STORAGE_PATH,
- ProviderTableMeta.FILE_STORAGE_PATH);
- mFileProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE,
- ProviderTableMeta.FILE_LAST_SYNC_DATE);
- mFileProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA,
- ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA);
- mFileProjectionMap.put(ProviderTableMeta.FILE_KEEP_IN_SYNC,
- ProviderTableMeta.FILE_KEEP_IN_SYNC);
- mFileProjectionMap.put(ProviderTableMeta.FILE_ACCOUNT_OWNER,
- ProviderTableMeta.FILE_ACCOUNT_OWNER);
- mFileProjectionMap.put(ProviderTableMeta.FILE_ETAG,
- ProviderTableMeta.FILE_ETAG);
- mFileProjectionMap.put(ProviderTableMeta.FILE_SHARE_BY_LINK,
- ProviderTableMeta.FILE_SHARE_BY_LINK);
- mFileProjectionMap.put(ProviderTableMeta.FILE_PUBLIC_LINK,
- ProviderTableMeta.FILE_PUBLIC_LINK);
- mFileProjectionMap.put(ProviderTableMeta.FILE_PERMISSIONS,
- ProviderTableMeta.FILE_PERMISSIONS);
- mFileProjectionMap.put(ProviderTableMeta.FILE_REMOTE_ID,
- ProviderTableMeta.FILE_REMOTE_ID);
- mFileProjectionMap.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL,
- ProviderTableMeta.FILE_UPDATE_THUMBNAIL);
- mFileProjectionMap.put(ProviderTableMeta.FILE_IS_DOWNLOADING,
- ProviderTableMeta.FILE_IS_DOWNLOADING);
- }
-
private static final int SINGLE_FILE = 1;
private static final int DIRECTORY = 2;
private static final int ROOT_DIRECTORY = 3;
private static final int SHARES = 4;
+ private static final int CAPABILITIES = 5;
private static final String TAG = FileContentProvider.class.getSimpleName();
- // Projection for ocshares table
- private static HashMap<String, String> mOCSharesProjectionMap;
- static {
- mOCSharesProjectionMap = new HashMap<String, String>();
- mOCSharesProjectionMap.put(ProviderTableMeta._ID, ProviderTableMeta._ID);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_FILE_SOURCE,
- ProviderTableMeta.OCSHARES_FILE_SOURCE);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE,
- ProviderTableMeta.OCSHARES_ITEM_SOURCE);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_TYPE,
- ProviderTableMeta.OCSHARES_SHARE_TYPE);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_WITH,
- ProviderTableMeta.OCSHARES_SHARE_WITH);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_PATH,
- ProviderTableMeta.OCSHARES_PATH);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_PERMISSIONS,
- ProviderTableMeta.OCSHARES_PERMISSIONS);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARED_DATE,
- ProviderTableMeta.OCSHARES_SHARED_DATE);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE,
- ProviderTableMeta.OCSHARES_EXPIRATION_DATE);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_TOKEN,
- ProviderTableMeta.OCSHARES_TOKEN);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
- ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY,
- ProviderTableMeta.OCSHARES_IS_DIRECTORY);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_USER_ID,
- ProviderTableMeta.OCSHARES_USER_ID);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED,
- ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED);
- mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER,
- ProviderTableMeta.OCSHARES_ACCOUNT_OWNER);
- }
-
private UriMatcher mUriMatcher;
@Override
if (c != null && c.moveToFirst()) {
remoteId = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID));
//ThumbnailsCacheManager.removeFileFromCache(remoteId);
+ c.close();
}
Log_OC.d(TAG, "Removing FILE " + remoteId);
+ uri.getPathSegments().get(1)
+ (!TextUtils.isEmpty(where) ? " AND (" + where
+ ")" : ""), whereArgs);
- /* just for log
- if (c!=null) {
- c.close();
- }
- */
break;
case DIRECTORY:
// deletion of folder is recursive
case SHARES:
count = db.delete(ProviderTableMeta.OCSHARES_TABLE_NAME, where, whereArgs);
break;
+ case CAPABILITIES:
+ count = db.delete(ProviderTableMeta.CAPABILITIES_TABLE_NAME, where, whereArgs);
+ break;
default:
//Log_OC.e(TAG, "Unknown uri " + uri);
throw new IllegalArgumentException("Unknown uri: " + uri.toString());
// ugly patch; serious refactorization is needed to reduce work in
// FileDataStorageManager and bring it to FileContentProvider
if (doubleCheck == null || !doubleCheck.moveToFirst()) {
+ if (doubleCheck != null) {
+ doubleCheck.close();
+ }
long rowId = db.insert(ProviderTableMeta.FILE_TABLE_NAME, null, values);
if (rowId > 0) {
- Uri insertedFileUri =
- ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, rowId);
- return insertedFileUri;
+ return ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, rowId);
} else {
throw new SQLException("ERROR " + uri);
}
}
case SHARES:
- String path = values.getAsString(ProviderTableMeta.OCSHARES_PATH);
- String accountNameShare= values.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER);
- String[] projectionShare = new String[] {
- ProviderTableMeta._ID, ProviderTableMeta.OCSHARES_PATH,
- ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
- };
- String whereShare = ProviderTableMeta.OCSHARES_PATH + "=? AND " +
- ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
- String[] whereArgsShare = new String[] {path, accountNameShare};
Uri insertedShareUri = null;
- Cursor doubleCheckShare =
- query(db, uri, projectionShare, whereShare, whereArgsShare, null);
- // ugly patch; serious refactorization is needed to reduce work in
- // FileDataStorageManager and bring it to FileContentProvider
- if (doubleCheckShare == null || !doubleCheckShare.moveToFirst()) {
- long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values);
- if (rowId >0) {
- insertedShareUri =
- ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, rowId);
- } else {
- throw new SQLException("ERROR " + uri);
-
- }
+ long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values);
+ if (rowId >0) {
+ insertedShareUri =
+ ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, rowId);
} else {
- // file is already inserted; race condition, let's avoid a duplicated entry
- insertedShareUri = ContentUris.withAppendedId(
- ProviderTableMeta.CONTENT_URI_SHARE,
- doubleCheckShare.getLong(
- doubleCheckShare.getColumnIndex(ProviderTableMeta._ID)
- )
- );
- doubleCheckShare.close();
+ throw new SQLException("ERROR " + uri);
+
}
- updateFilesTableAccordingToShareInsertion(db, uri, values);
+ updateFilesTableAccordingToShareInsertion(db, values);
return insertedShareUri;
+ case CAPABILITIES:
+ Uri insertedCapUri = null;
+ long id = db.insert(ProviderTableMeta.CAPABILITIES_TABLE_NAME, null, values);
+ if (id >0) {
+ insertedCapUri =
+ ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_CAPABILITIES, id);
+ } else {
+ throw new SQLException("ERROR " + uri);
+
+ }
+ return insertedCapUri;
default:
throw new IllegalArgumentException("Unknown uri id: " + uri);
}
private void updateFilesTableAccordingToShareInsertion(
- SQLiteDatabase db, Uri uri, ContentValues shareValues
+ SQLiteDatabase db, ContentValues newShare
) {
ContentValues fileValues = new ContentValues();
- fileValues.put(
- ProviderTableMeta.FILE_SHARE_BY_LINK,
- ShareType.PUBLIC_LINK.getValue() ==
- shareValues.getAsInteger(ProviderTableMeta.OCSHARES_SHARE_TYPE) ? 1 : 0
- );
- String whereShare = ProviderTableMeta.FILE_PATH + "=? AND " +
+ int newShareType = newShare.getAsInteger(ProviderTableMeta.OCSHARES_SHARE_TYPE);
+ if (newShareType == ShareType.PUBLIC_LINK.getValue()) {
+ fileValues.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, 1);
+ } else if (newShareType == ShareType.USER.getValue() || newShareType == ShareType.GROUP.getValue()) {
+ fileValues.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, 1);
+ }
+
+ String where = ProviderTableMeta.FILE_PATH + "=? AND " +
ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?";
- String[] whereArgsShare = new String[] {
- shareValues.getAsString(ProviderTableMeta.OCSHARES_PATH),
- shareValues.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER)
+ String[] whereArgs = new String[] {
+ newShare.getAsString(ProviderTableMeta.OCSHARES_PATH),
+ newShare.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER)
};
- db.update(ProviderTableMeta.FILE_TABLE_NAME, fileValues, whereShare, whereArgsShare);
+ db.update(ProviderTableMeta.FILE_TABLE_NAME, fileValues, where, whereArgs);
}
mUriMatcher.addURI(authority, "dir/#", DIRECTORY);
mUriMatcher.addURI(authority, "shares/", SHARES);
mUriMatcher.addURI(authority, "shares/#", SHARES);
+ mUriMatcher.addURI(authority, "capabilities/", CAPABILITIES);
+ mUriMatcher.addURI(authority, "capabilities/#", CAPABILITIES);
return true;
}
SQLiteQueryBuilder sqlQuery = new SQLiteQueryBuilder();
sqlQuery.setTables(ProviderTableMeta.FILE_TABLE_NAME);
- sqlQuery.setProjectionMap(mFileProjectionMap);
switch (mUriMatcher.match(uri)) {
case ROOT_DIRECTORY:
break;
case SHARES:
sqlQuery.setTables(ProviderTableMeta.OCSHARES_TABLE_NAME);
- sqlQuery.setProjectionMap(mOCSharesProjectionMap);
+ if (uri.getPathSegments().size() > 1) {
+ sqlQuery.appendWhere(ProviderTableMeta._ID + "="
+ + uri.getPathSegments().get(1));
+ }
+ break;
+ case CAPABILITIES:
+ sqlQuery.setTables(ProviderTableMeta.CAPABILITIES_TABLE_NAME);
if (uri.getPathSegments().size() > 1) {
sqlQuery.appendWhere(ProviderTableMeta._ID + "="
+ uri.getPathSegments().get(1));
String order;
if (TextUtils.isEmpty(sortOrder)) {
- if (mUriMatcher.match(uri) == SHARES) {
- order = ProviderTableMeta.OCSHARES_DEFAULT_SORT_ORDER;
- } else {
-
- order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER;
+ switch (mUriMatcher.match(uri)) {
+ case SHARES:
+ order = ProviderTableMeta.OCSHARES_DEFAULT_SORT_ORDER;
+ break;
+ case CAPABILITIES:
+ order = ProviderTableMeta.CAPABILITIES_DEFAULT_SORT_ORDER;
+ break;
+ default: // Files
+ order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER;
+ break;
}
} else {
order = sortOrder;
return db.update(
ProviderTableMeta.OCSHARES_TABLE_NAME, values, selection, selectionArgs
);
+ case CAPABILITIES:
+ return db.update(
+ ProviderTableMeta.CAPABILITIES_TABLE_NAME, values, selection, selectionArgs
+ );
default:
return db.update(
ProviderTableMeta.FILE_TABLE_NAME, values, selection, selectionArgs
}
}
- /*
- private int updateFolderSize(SQLiteDatabase db, String folderId) {
- int count = 0;
- String [] whereArgs = new String[] { folderId };
-
- // read current size saved for the folder
- long folderSize = 0;
- long folderParentId = -1;
- Uri selectFolderUri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, folderId);
- String[] folderProjection = new String[] { ProviderTableMeta.FILE_CONTENT_LENGTH, ProviderTableMeta.FILE_PARENT};
- String folderWhere = ProviderTableMeta._ID + "=?";
- Cursor folderCursor = query(db, selectFolderUri, folderProjection, folderWhere, whereArgs, null);
- if (folderCursor != null && folderCursor.moveToFirst()) {
- folderSize = folderCursor.getLong(folderCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_LENGTH));;
- folderParentId = folderCursor.getLong(folderCursor.getColumnIndex(ProviderTableMeta.FILE_PARENT));;
- }
- folderCursor.close();
-
- // read and sum sizes of children
- long childrenSize = 0;
- Uri selectChildrenUri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, folderId);
- String[] childrenProjection = new String[] { ProviderTableMeta.FILE_CONTENT_LENGTH, ProviderTableMeta.FILE_PARENT};
- String childrenWhere = ProviderTableMeta.FILE_PARENT + "=?";
- Cursor childrenCursor = query(db, selectChildrenUri, childrenProjection, childrenWhere, whereArgs, null);
- if (childrenCursor != null && childrenCursor.moveToFirst()) {
- while (!childrenCursor.isAfterLast()) {
- childrenSize += childrenCursor.getLong(childrenCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_LENGTH));
- childrenCursor.moveToNext();
- }
- }
- childrenCursor.close();
-
- // update if needed
- if (folderSize != childrenSize) {
- Log_OC.d("FileContentProvider", "Updating " + folderSize + " to " + childrenSize);
- ContentValues cv = new ContentValues();
- cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, childrenSize);
- count = db.update(ProviderTableMeta.FILE_TABLE_NAME, cv, folderWhere, whereArgs);
-
- // propagate update until root
- if (folderParentId > FileDataStorageManager.ROOT_PARENT_ID) {
- Log_OC.d("FileContentProvider", "Propagating update to " + folderParentId);
- updateFolderSize(db, String.valueOf(folderParentId));
- } else {
- Log_OC.d("FileContentProvider", "NOT propagating to " + folderParentId);
- }
- } else {
- Log_OC.d("FileContentProvider", "NOT updating, sizes are " + folderSize + " and " + childrenSize);
- }
- return count;
- }
-*/
-
@Override
public ContentProviderResult[] applyBatch (ArrayList<ContentProviderOperation> operations)
throws OperationApplicationException {
// files table
Log_OC.i("SQL", "Entering in onCreate");
db.execSQL("CREATE TABLE " + ProviderTableMeta.FILE_TABLE_NAME + "("
- + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "
- + ProviderTableMeta.FILE_NAME + " TEXT, "
- + ProviderTableMeta.FILE_PATH + " TEXT, "
- + ProviderTableMeta.FILE_PARENT + " INTEGER, "
- + ProviderTableMeta.FILE_CREATION + " INTEGER, "
- + ProviderTableMeta.FILE_MODIFIED + " INTEGER, "
- + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, "
- + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, "
- + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, "
- + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, "
- + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER, "
- + ProviderTableMeta.FILE_KEEP_IN_SYNC + " INTEGER, "
- + ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA + " INTEGER, "
- + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, "
- + ProviderTableMeta.FILE_ETAG + " TEXT, "
- + ProviderTableMeta.FILE_SHARE_BY_LINK + " INTEGER, "
- + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, "
- + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null,"
- + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null,"
- + ProviderTableMeta.FILE_UPDATE_THUMBNAIL + " INTEGER," //boolean
- + ProviderTableMeta.FILE_IS_DOWNLOADING + " INTEGER);" //boolean
- );
+ + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "
+ + ProviderTableMeta.FILE_NAME + " TEXT, "
+ + ProviderTableMeta.FILE_PATH + " TEXT, "
+ + ProviderTableMeta.FILE_PARENT + " INTEGER, "
+ + ProviderTableMeta.FILE_CREATION + " INTEGER, "
+ + ProviderTableMeta.FILE_MODIFIED + " INTEGER, "
+ + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, "
+ + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, "
+ + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, "
+ + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, "
+ + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER, "
+ + ProviderTableMeta.FILE_KEEP_IN_SYNC + " INTEGER, "
+ + ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA + " INTEGER, "
+ + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, "
+ + ProviderTableMeta.FILE_ETAG + " TEXT, "
+ + ProviderTableMeta.FILE_SHARED_VIA_LINK + " INTEGER, "
+ + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, "
+ + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null,"
+ + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null,"
+ + ProviderTableMeta.FILE_UPDATE_THUMBNAIL + " INTEGER," //boolean
+ + ProviderTableMeta.FILE_IS_DOWNLOADING + " INTEGER," //boolean
+ + ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " TEXT,"
+ + ProviderTableMeta.FILE_SHARED_WITH_SHAREE + " INTEGER);"
+ );
// Create table ocshares
db.execSQL("CREATE TABLE " + ProviderTableMeta.OCSHARES_TABLE_NAME + "("
+ ProviderTableMeta.OCSHARES_USER_ID + " INTEGER, "
+ ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + " INTEGER,"
+ ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + " TEXT );" );
+
+ // Create table capabilities
+ createCapabilitiesTable(db);
+
}
@Override
db.beginTransaction();
try {
db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
- " ADD COLUMN " + ProviderTableMeta.FILE_SHARE_BY_LINK + " INTEGER " +
+ " ADD COLUMN " + ProviderTableMeta.FILE_SHARED_VIA_LINK + " INTEGER " +
" DEFAULT 0");
db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
if (!upgraded)
Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion +
", newVersion == " + newVersion);
+
+ if (oldVersion < 11 && newVersion >= 11) {
+ Log_OC.i("SQL", "Entering in the #11 ADD in onUpgrade");
+ db.beginTransaction();
+ try {
+ db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
+ " ADD COLUMN " + ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " TEXT " +
+ " DEFAULT NULL");
+
+ upgraded = true;
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+ if (!upgraded)
+ Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion +
+ ", newVersion == " + newVersion);
+
+ if (oldVersion < 12 && newVersion >= 12) {
+ Log_OC.i("SQL", "Entering in the #12 ADD in onUpgrade");
+ db.beginTransaction();
+ try {
+ db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
+ " ADD COLUMN " + ProviderTableMeta.FILE_SHARED_WITH_SHAREE + " INTEGER " +
+ " DEFAULT 0");
+ upgraded = true;
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+ if (!upgraded)
+ Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion +
+ ", newVersion == " + newVersion);
+
+ if (oldVersion < 13 && newVersion >= 13) {
+ Log_OC.i("SQL", "Entering in the #13 ADD in onUpgrade");
+ db.beginTransaction();
+ try {
+ // Create capabilities table
+ createCapabilitiesTable(db);
+ upgraded = true;
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+ if (!upgraded)
+ Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion +
+ ", newVersion == " + newVersion);
+
}
}
+ private void createCapabilitiesTable(SQLiteDatabase db){
+ // Create table capabilities
+ db.execSQL("CREATE TABLE " + ProviderTableMeta.CAPABILITIES_TABLE_NAME + "("
+ + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "
+ + ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + " TEXT, "
+ + ProviderTableMeta.CAPABILITIES_VERSION_MAYOR + " INTEGER, "
+ + ProviderTableMeta.CAPABILITIES_VERSION_MINOR + " INTEGER, "
+ + ProviderTableMeta.CAPABILITIES_VERSION_MICRO + " INTEGER, "
+ + ProviderTableMeta.CAPABILITIES_VERSION_STRING + " TEXT, "
+ + ProviderTableMeta.CAPABILITIES_VERSION_EDITION + " TEXT, "
+ + ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL + " INTEGER, "
+ + ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS + " INTEGER, "
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_RESHARING + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_FILES_UNDELETE + " INTEGER, " // boolean
+ + ProviderTableMeta.CAPABILITIES_FILES_VERSIONING + " INTEGER );" ); // boolean
+ }
/**
* Version 10 of database does not modify its scheme. It coincides with the upgrade of the ownCloud account names
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+
+package com.owncloud.android.providers;
+
+import android.accounts.Account;
+import android.app.SearchManager;
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.support.annotation.Nullable;
+
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.GetRemoteShareesOperation;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * Content provider for search suggestions, to search for users and groups existing in an ownCloud server.
+ */
+public class UsersAndGroupsSearchProvider extends ContentProvider {
+
+ private static final String TAG = UsersAndGroupsSearchProvider.class.getSimpleName();
+
+ private static final String[] COLUMNS = {
+ BaseColumns._ID,
+ SearchManager.SUGGEST_COLUMN_TEXT_1,
+ SearchManager.SUGGEST_COLUMN_INTENT_DATA
+ };
+
+ private static final int SEARCH = 1;
+
+ private static final int RESULTS_PER_PAGE = 50;
+ private static final int REQUESTED_PAGE = 1;
+
+ public static final String AUTHORITY = UsersAndGroupsSearchProvider.class.getCanonicalName();
+ public static final String ACTION_SHARE_WITH = AUTHORITY + ".action.SHARE_WITH";
+ public static final String DATA_USER = AUTHORITY + ".data.user";
+ public static final String DATA_GROUP = AUTHORITY + ".data.group";
+
+ private UriMatcher mUriMatcher;
+
+ @Nullable
+ @Override
+ public String getType(Uri uri) {
+ // TODO implement
+ return null;
+ }
+
+ @Override
+ public boolean onCreate() {
+ mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+ mUriMatcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH);
+ return true;
+ }
+
+ /**
+ * TODO description
+ *
+ * Reference: http://developer.android.com/guide/topics/search/adding-custom-suggestions.html#CustomContentProvider
+ *
+ * @param uri Content {@link Uri}, formattted as
+ * "content://com.owncloud.android.providers.UsersAndGroupsSearchProvider/" +
+ * {@link android.app.SearchManager#SUGGEST_URI_PATH_QUERY} + "/" + 'userQuery'
+ * @param projection Expected to be NULL.
+ * @param selection Expected to be NULL.
+ * @param selectionArgs Expected to be NULL.
+ * @param sortOrder Expected to be NULL.
+ * @return Cursor with users and groups in the ownCloud server that match 'userQuery'.
+ */
+ @Nullable
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
+ Log_OC.d(TAG, "query received in thread " + Thread.currentThread().getName());
+
+ int match = mUriMatcher.match(uri);
+ switch (match) {
+ case SEARCH:
+ return searchForUsersOrGroups(uri);
+
+ default:
+ return null;
+ }
+ }
+
+ private Cursor searchForUsersOrGroups(Uri uri) {
+ MatrixCursor response = null;
+
+
+ String userQuery = uri.getLastPathSegment().toLowerCase();
+
+
+ /// need to trust on the AccountUtils to get the current account since the query in the client side is not
+ /// directly started by our code, but from SearchView implementation
+ Account account = AccountUtils.getCurrentOwnCloudAccount(getContext());
+
+ /// request to the OC server about users and groups matching userQuery
+ GetRemoteShareesOperation searchRequest = new GetRemoteShareesOperation(
+ userQuery, REQUESTED_PAGE, RESULTS_PER_PAGE
+ );
+ RemoteOperationResult result = searchRequest.execute(account, getContext());
+ List<JSONObject> names = new ArrayList<JSONObject>();
+ if (result.isSuccess()) {
+ for (Object o : result.getData()) {
+ // Get JSonObjects from response
+ names.add((JSONObject) o);
+ }
+ }
+
+ /// convert the responses from the OC server to the expected format
+ if (names.size() > 0) {
+ response = new MatrixCursor(COLUMNS);
+ Iterator<JSONObject> namesIt = names.iterator();
+ int count = 0;
+ JSONObject item;
+ String displayName;
+ Uri dataUri;
+ Uri userBaseUri = new Uri.Builder().scheme("content").authority(DATA_USER).build();
+ Uri groupBaseUri = new Uri.Builder().scheme("content").authority(DATA_GROUP).build();
+ try {
+ while (namesIt.hasNext()) {
+ item = namesIt.next();
+ String userName = item.getString(GetRemoteShareesOperation.PROPERTY_LABEL);
+ JSONObject value = item.getJSONObject(GetRemoteShareesOperation.NODE_VALUE);
+ byte type = (byte) value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE);
+ String shareWith = value.getString(GetRemoteShareesOperation.PROPERTY_SHARE_WITH);
+ if (GetRemoteShareesOperation.GROUP_TYPE.equals(type)) {
+ displayName = getContext().getString(R.string.share_group_clarification, userName);
+ dataUri = Uri.withAppendedPath(groupBaseUri, shareWith);
+ } else {
+ displayName = userName;
+ dataUri = Uri.withAppendedPath(userBaseUri, shareWith);
+ }
+ response.newRow()
+ .add(count++) // BaseColumns._ID
+ .add(displayName) // SearchManager.SUGGEST_COLUMN_TEXT_1
+ .add(dataUri);
+ }
+ } catch (JSONException e) {
+ Log_OC.e(TAG, "Exception while parsing data of users/groups", e);
+ }
+ }
+
+ return response;
+ }
+
+ @Nullable
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ // TODO implementation
+ return null;
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ // TODO implementation
+ return 0;
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ // TODO implementation
+ return 0;
+ }
+
+}
package com.owncloud.android.services;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ConcurrentMap;
+import android.accounts.Account;
+import android.accounts.AccountsException;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
+import android.app.Service;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Process;
+import android.util.Pair;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;
-import com.owncloud.android.operations.common.SyncOperation;
+import com.owncloud.android.operations.CopyFileOperation;
import com.owncloud.android.operations.CreateFolderOperation;
-import com.owncloud.android.operations.CreateShareOperation;
+import com.owncloud.android.operations.CreateShareViaLinkOperation;
+import com.owncloud.android.operations.CreateShareWithShareeOperation;
import com.owncloud.android.operations.GetServerInfoOperation;
import com.owncloud.android.operations.MoveFileOperation;
import com.owncloud.android.operations.OAuth2GetAccessToken;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
import com.owncloud.android.operations.SynchronizeFolderOperation;
-import com.owncloud.android.operations.UnshareLinkOperation;
+import com.owncloud.android.operations.UnshareOperation;
+import com.owncloud.android.operations.UpdateShareViaLinkOperation;
+import com.owncloud.android.operations.common.SyncOperation;
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AccountsException;
-import android.accounts.AuthenticatorException;
-import android.accounts.OperationCanceledException;
-import android.app.Service;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Process;
-import android.util.Pair;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentMap;
public class OperationsService extends Service {
-
+
private static final String TAG = OperationsService.class.getSimpleName();
-
+
public static final String EXTRA_ACCOUNT = "ACCOUNT";
public static final String EXTRA_SERVER_URL = "SERVER_URL";
public static final String EXTRA_OAUTH2_QUERY_PARAMETERS = "OAUTH2_QUERY_PARAMETERS";
public static final String EXTRA_RESULT = "RESULT";
public static final String EXTRA_NEW_PARENT_PATH = "NEW_PARENT_PATH";
public static final String EXTRA_FILE = "FILE";
- public static final String EXTRA_PASSWORD_SHARE = "PASSWORD_SHARE";
+ public static final String EXTRA_SHARE_PASSWORD = "SHARE_PASSWORD";
+ public static final String EXTRA_SHARE_TYPE = "SHARE_TYPE";
+ public static final String EXTRA_SHARE_WITH = "SHARE_WITH";
+ public static final String EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS = "SHARE_EXPIRATION_YEAR";
+ public static final String EXTRA_SHARE_EXPIRATION_MONTH_OF_YEAR = "SHARE_EXPIRATION_MONTH_OF_YEAR";
+ public static final String EXTRA_SHARE_EXPIRATION_DAY_OF_MONTH = "SHARE_EXPIRATION_DAY_OF_MONTH";
public static final String EXTRA_COOKIE = "COOKIE";
-
- public static final String ACTION_CREATE_SHARE = "CREATE_SHARE";
+
+ public static final String ACTION_CREATE_SHARE_VIA_LINK = "CREATE_SHARE_VIA_LINK";
+ public static final String ACTION_CREATE_SHARE_WITH_SHAREE = "CREATE_SHARE_WITH_SHAREE";
public static final String ACTION_UNSHARE = "UNSHARE";
+ public static final String ACTION_UPDATE_SHARE = "UPDATE_SHARE";
public static final String ACTION_GET_SERVER_INFO = "GET_SERVER_INFO";
public static final String ACTION_OAUTH2_GET_ACCESS_TOKEN = "OAUTH2_GET_ACCESS_TOKEN";
public static final String ACTION_GET_USER_NAME = "GET_USER_NAME";
public static final String ACTION_REMOVE = "REMOVE";
public static final String ACTION_CREATE_FOLDER = "CREATE_FOLDER";
public static final String ACTION_SYNC_FILE = "SYNC_FILE";
- public static final String ACTION_SYNC_FOLDER = "SYNC_FOLDER";//for the moment, just to download
+ public static final String ACTION_SYNC_FOLDER = "SYNC_FOLDER";
public static final String ACTION_MOVE_FILE = "MOVE_FILE";
-
+ public static final String ACTION_COPY_FILE = "COPY_FILE";
+
public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() +
".OPERATION_ADDED";
public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() +
".OPERATION_FINISHED";
- private ConcurrentMap<Integer, Pair<RemoteOperation, RemoteOperationResult>>
- mUndispatchedFinishedOperations =
+ private ConcurrentMap<Integer, Pair<RemoteOperation, RemoteOperationResult>>
+ mUndispatchedFinishedOperations =
new ConcurrentHashMap<Integer, Pair<RemoteOperation, RemoteOperationResult>>();
-
+
private static class Target {
public Uri mServerUrl = null;
public Account mAccount = null;
public String mCookie = null;
-
+
public Target(Account account, Uri serverUrl, String cookie) {
mAccount = account;
mServerUrl = serverUrl;
mSyncFolderHandler = new SyncFolderHandler(thread.getLooper(), this);
}
-
+
/**
* Entry point to add a new operation to the queue of operations.
- *
- * New operations are added calling to startService(), resulting in a call to this method.
+ * <p/>
+ * New operations are added calling to startService(), resulting in a call to this method.
* This ensures the service will keep on working although the caller activity goes away.
*/
@Override
// Saving cookies
try {
OwnCloudClientManagerFactory.getDefaultSingleton().
- saveAllClients(this, MainApp.getAccountType());
-
+ saveAllClients(this, MainApp.getAccountType());
+
// TODO - get rid of these exceptions
} catch (AccountNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
-
+
mUndispatchedFinishedOperations.clear();
mOperationsBinder = null;
}
/**
- * Provides a binder object that clients can use to perform actions on the queue of operations,
- * except the addition of new operations.
+ * Provides a binder object that clients can use to perform actions on the queue of operations,
+ * except the addition of new operations.
*/
@Override
public IBinder onBind(Intent intent) {
- //Log_OC.wtf(TAG, "onBind" );
return mOperationsBinder;
}
-
+
/**
* Called when ALL the bound clients were unbound.
*/
/**
- * Binder to let client components to perform actions on the queue of operations.
- *
- * It provides by itself the available operations.
+ * Binder to let client components to perform actions on the queue of operations.
+ * <p/>
+ * It provides by itself the available operations.
*/
public class OperationsServiceBinder extends Binder /* implements OnRemoteOperationListener */ {
-
- /**
+
+ /**
* Map of listeners that will be reported about the end of operations from a
* {@link OperationsServiceBinder} instance
*/
- private ConcurrentMap<OnRemoteOperationListener, Handler> mBoundListeners =
+ private final ConcurrentMap<OnRemoteOperationListener, Handler> mBoundListeners =
new ConcurrentHashMap<OnRemoteOperationListener, Handler>();
-
- private ServiceHandler mServiceHandler = null;
+
+ private ServiceHandler mServiceHandler = null;
public OperationsServiceBinder(ServiceHandler serviceHandler) {
mServiceHandler = serviceHandler;
public void clearListeners() {
-
+
mBoundListeners.clear();
}
-
+
/**
* Adds a listener interested in being reported about the end of operations.
- *
- * @param listener Object to notify about the end of operations.
+ *
+ * @param listener Object to notify about the end of operations.
* @param callbackHandler {@link Handler} to access the listener without
* breaking Android threading protection.
*/
mBoundListeners.put(listener, callbackHandler);
}
}
-
-
+
+
/**
* Removes a listener from the list of objects interested in the being reported about
* the end of operations.
*
* @param listener Object to notify about progress of transfer.
*/
- public void removeOperationListener (OnRemoteOperationListener listener) {
+ public void removeOperationListener(OnRemoteOperationListener listener) {
synchronized (mBoundListeners) {
mBoundListeners.remove(listener);
}
/**
- * TODO - IMPORTANT: update implementation when more operations are moved into the service
- *
+ * TODO - IMPORTANT: update implementation when more operations are moved into the service
+ *
* @return 'True' when an operation that enforces the user to wait for completion is
* in process.
*/
return Long.MAX_VALUE;
}
}
-
-
+
+
public boolean dispatchResultIfFinished(int operationId,
OnRemoteOperationListener listener) {
Pair<RemoteOperation, RemoteOperationResult> undispatched =
/**
- * Operations worker. Performs the pending operations in the order they were requested.
- *
+ * Operations worker. Performs the pending operations in the order they were requested.
+ *
* Created with the Looper of a new thread, started in {@link OperationsService#onCreate()}.
*/
private static class ServiceHandler extends Handler {
OperationsService mService;
-
-
+
+
private ConcurrentLinkedQueue<Pair<Target, RemoteOperation>> mPendingOperations =
new ConcurrentLinkedQueue<Pair<Target, RemoteOperation>>();
private RemoteOperation mCurrentOperation = null;
Log_OC.d(TAG, "Stopping after command with id " + msg.arg1);
mService.stopSelf(msg.arg1);
}
-
+
/**
* Performs the next operation in the queue
} else {
result = mCurrentOperation.execute(mOwnCloudClient);
}
-
+
} catch (AccountsException e) {
if (mLastTarget.mAccount == null) {
Log_OC.e(TAG, "Error while trying to get authorization for a NULL account",
}
-
+
}
-
+
/**
* Creates a new operation, as described by operationIntent.
if (!operationIntent.hasExtra(EXTRA_ACCOUNT) &&
!operationIntent.hasExtra(EXTRA_SERVER_URL)) {
Log_OC.e(TAG, "Not enough information provided in intent");
-
+
} else {
Account account = operationIntent.getParcelableExtra(EXTRA_ACCOUNT);
String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL);
);
String action = operationIntent.getAction();
- if (action.equals(ACTION_CREATE_SHARE)) { // Create Share
+ if (action.equals(ACTION_CREATE_SHARE_VIA_LINK)) { // Create public share via link
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
- String password = operationIntent.getStringExtra(EXTRA_PASSWORD_SHARE);
+ String password = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
Intent sendIntent = operationIntent.getParcelableExtra(EXTRA_SEND_INTENT);
if (remotePath.length() > 0) {
- operation = new CreateShareOperation(OperationsService.this, remotePath,
- ShareType.PUBLIC_LINK,
- "", false, password, 1, sendIntent);
+ operation = new CreateShareViaLinkOperation(
+ remotePath,
+ password,
+ sendIntent
+ );
}
-
+
+ } else if (ACTION_UPDATE_SHARE.equals(action)) {
+ String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
+ if (remotePath.length() > 0) {
+ operation = new UpdateShareViaLinkOperation(remotePath);
+
+ String password = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
+ ((UpdateShareViaLinkOperation)operation).setPassword(password);
+
+ long expirationDate = operationIntent.getLongExtra(
+ EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS,
+ 0
+ );
+ ((UpdateShareViaLinkOperation)operation).setExpirationDate(
+ expirationDate
+ );
+ }
+
+ } else if (action.equals(ACTION_CREATE_SHARE_WITH_SHAREE)) {
+ // Create private share with user or group
+ String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
+ String shareeName = operationIntent.getStringExtra(EXTRA_SHARE_WITH);
+ ShareType shareType = (ShareType) operationIntent.getSerializableExtra(EXTRA_SHARE_TYPE);
+ if (remotePath.length() > 0) {
+ operation = new CreateShareWithShareeOperation(
+ remotePath,
+ shareeName,
+ shareType
+ );
+ }
+
} else if (action.equals(ACTION_UNSHARE)) { // Unshare file
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
+ ShareType shareType = (ShareType) operationIntent.
+ getSerializableExtra(EXTRA_SHARE_TYPE);
+ String shareWith = operationIntent.getStringExtra(EXTRA_SHARE_WITH);
if (remotePath.length() > 0) {
- operation = new UnshareLinkOperation(
- remotePath,
- OperationsService.this);
+ operation = new UnshareOperation(
+ remotePath,
+ shareType,
+ shareWith,
+ OperationsService.this
+ );
}
} else if (action.equals(ACTION_GET_SERVER_INFO)) {
// check OC server and get basic information from it
operation = new GetServerInfoOperation(serverUrl, OperationsService.this);
-
+
} else if (action.equals(ACTION_OAUTH2_GET_ACCESS_TOKEN)) {
/// GET ACCESS TOKEN to the OAuth server
String oauth2QueryParameters =
getString(R.string.oauth2_redirect_uri),
getString(R.string.oauth2_grant_type),
oauth2QueryParameters);
-
+
} else if (action.equals(ACTION_GET_USER_NAME)) {
// Get User Name
operation = new GetRemoteUserNameOperation();
boolean createFullPath = operationIntent.getBooleanExtra(EXTRA_CREATE_FULL_PATH,
true);
operation = new CreateFolderOperation(remotePath, createFullPath);
-
+
} else if (action.equals(ACTION_SYNC_FILE)) {
// Sync file
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
);
} else if (action.equals(ACTION_SYNC_FOLDER)) {
- // Sync file
+ // Sync folder (all its descendant files are sync'ed)
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
operation = new SynchronizeFolderOperation(
this, // TODO remove this dependency from construction time
account,
System.currentTimeMillis() // TODO remove this dependency from construction time
);
-
+
} else if (action.equals(ACTION_MOVE_FILE)) {
// Move file/folder
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
String newParentPath = operationIntent.getStringExtra(EXTRA_NEW_PARENT_PATH);
- operation = new MoveFileOperation(remotePath,newParentPath,account);
+ operation = new MoveFileOperation(remotePath, newParentPath, account);
+
+ } else if (action.equals(ACTION_COPY_FILE)) {
+ // Copy file/folder
+ String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
+ String newParentPath = operationIntent.getStringExtra(EXTRA_NEW_PARENT_PATH);
+ operation = new CopyFileOperation(remotePath, newParentPath, account);
}
-
}
} catch (IllegalArgumentException e) {
return null;
}
}
-
+
/**
* Sends a broadcast when a new operation is added to the queue.
- *
+ *
* Local broadcasts are only delivered to activities in the same process, but can't be
* done sticky :\
*
private void sendBroadcastNewOperation(Target target, RemoteOperation operation) {
Intent intent = new Intent(ACTION_OPERATION_ADDED);
if (target.mAccount != null) {
- intent.putExtra(EXTRA_ACCOUNT, target.mAccount);
+ intent.putExtra(EXTRA_ACCOUNT, target.mAccount);
} else {
- intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
+ intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
}
//LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
//lbm.sendBroadcast(intent);
sendStickyBroadcast(intent);
}
-
+
// TODO - maybe add a notification for real start of operations
-
+
/**
* Sends a LOCAL broadcast when an operations finishes in order to the interested activities c
* an update their view
*
* Local broadcasts are only delivered to activities in the same process.
- *
- * @param target Account or URL pointing to an OC server.
- * @param operation Finished operation.
- * @param result Result of the operation.
+ *
+ * @param target Account or URL pointing to an OC server.
+ * @param operation Finished operation.
+ * @param result Result of the operation.
*/
private void sendBroadcastOperationFinished(Target target, RemoteOperation operation,
RemoteOperationResult result) {
Intent intent = new Intent(ACTION_OPERATION_FINISHED);
intent.putExtra(EXTRA_RESULT, result);
if (target.mAccount != null) {
- intent.putExtra(EXTRA_ACCOUNT, target.mAccount);
+ intent.putExtra(EXTRA_ACCOUNT, target.mAccount);
} else {
- intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
+ intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
}
//LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
//lbm.sendBroadcast(intent);
sendStickyBroadcast(intent);
}
-
+
/**
* Notifies the currently subscribed listeners about the end of an operation.
*
}
}
if (count == 0) {
- //mOperationResults.put(operation.hashCode(), result);
- Pair<RemoteOperation, RemoteOperationResult> undispatched =
+ Pair<RemoteOperation, RemoteOperationResult> undispatched =
new Pair<RemoteOperation, RemoteOperationResult>(operation, result);
- mUndispatchedFinishedOperations.put(operation.hashCode(), undispatched);
+ mUndispatchedFinishedOperations.put(((Runnable) operation).hashCode(), undispatched);
}
Log_OC.d(TAG, "Called " + count + " listeners");
}
public void add(Account account, String remotePath,
SynchronizeFolderOperation syncFolderOperation){
- mPendingOperations.putIfAbsent(account, remotePath, syncFolderOperation);
- sendBroadcastNewSyncFolder(account, remotePath); // TODO upgrade!
+ Pair<String, String> putResult =
+ mPendingOperations.putIfAbsent(account, remotePath, syncFolderOperation);
+ if (putResult != null) {
+ sendBroadcastNewSyncFolder(account, remotePath); // TODO upgrade!
+ }
}
import org.apache.jackrabbit.webdav.DavException;
-import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
* Implementation of {@link AbstractThreadedSyncAdapter} responsible for synchronizing
* ownCloud files.
*
- * Performs a full synchronization of the account recieved in {@link #onPerformSync(Account, Bundle,
+ * Performs a full synchronization of the account received in {@link #onPerformSync(Account, Bundle,
* String, ContentProviderClient, SyncResult)}.
*/
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
".EVENT_FULL_SYNC_END";
public static final String EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED =
FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED";
- //public static final String EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED =
- // FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED";
-
+
public static final String EXTRA_ACCOUNT_NAME = FileSyncAdapter.class.getName() +
".EXTRA_ACCOUNT_NAME";
public static final String EXTRA_FOLDER_PATH = FileSyncAdapter.class.getName() +
if (mFailedResultsCounter > MAX_FAILED_RESULTS || isFinisher(mLastFailedResult))
return;
- /*
- OCFile folder,
- long currentSyncTime,
- boolean updateFolderProperties,
- boolean syncFullAccount,
- DataStorageManager dataStorageManager,
- Account account,
- Context context ) {
- }
- */
// folder synchronization
RefreshFolderOperation synchFolderOp = new RefreshFolderOperation( folder,
mCurrentSyncTime,
// synchronize children folders
List<OCFile> children = synchFolderOp.getChildren();
// beware of the 'hidden' recursion here!
- fetchChildren(folder, children, synchFolderOp.getRemoteFolderChanged());
+ syncChildren(children);
}
} else {
/**
* Triggers the synchronization of any folder contained in the list of received files.
+ *
+ * No consideration of etag here because it MUST walk down anyway, in case that kept-in-sync files
+ * have local changes.
*
* @param files Files to recursively synchronize.
*/
- private void fetchChildren(OCFile parent, List<OCFile> files, boolean parentEtagChanged) {
+ private void syncChildren(List<OCFile> files) {
int i;
- OCFile newFile = null;
- //String etag = null;
- //boolean syncDown = false;
+ OCFile newFile;
for (i=0; i < files.size() && !mCancellation; i++) {
newFile = files.get(i);
if (newFile.isFolder()) {
- /*
- etag = newFile.getEtag();
- syncDown = (parentEtagChanged || etag == null || etag.length() == 0);
- if(syncDown) { */
- synchronizeFolder(newFile);
- //sendLocalBroadcast(EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED, parent.getRemotePath(),
- // null);
- //}
+ synchronizeFolder(newFile);
}
}
private NotificationCompat.Builder createNotificationBuilder() {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getContext());
notificationBuilder.setSmallIcon(R.drawable.notification_icon).setAutoCancel(true);
+ notificationBuilder.setColor(getContext().getResources().getColor(R.color.primary));
return notificationBuilder;
}
private String mTitle;
private String mContentDescription;
+ private int mIcon;
// Constructors
public NavigationDrawerItem(){}
mTitle = title;
}
- public NavigationDrawerItem(String title, String contentDescription){
+ public NavigationDrawerItem(String title, String contentDescription, int icon){
mTitle = title;
mContentDescription = contentDescription;
+ mIcon = icon;
}
// Getters and Setters
public void setContentDescription(String contentDescription) {
this.mContentDescription = contentDescription;
}
+
+ public int getIcon() {
+ return mIcon;
+ }
+
+ public void setIcon(int icon) {
+ this.mIcon = icon;
+ }
}
package com.owncloud.android.ui.activity;
+import android.content.Intent;
+import android.os.Bundle;
+
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener;
-import com.owncloud.android.utils.DisplayUtils;
-
-import android.app.ActionBar;
-import android.content.Intent;
-import android.os.Bundle;
/**
* Wrapper activity which will be launched if keep-in-sync file will be modified by external
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ActionBar actionBar = getActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
}
@Override
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.activity;
+
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v7.app.AppCompatActivity;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.ui.dialog.LoadingDialog;
+import com.owncloud.android.utils.FileStorageUtils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.ref.WeakReference;
+
+
+public class ErrorReportActivity extends AppCompatActivity {
+
+ private static final String TAG = ErrorReportActivity.class.getSimpleName();
+
+ private String mLogText;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.error_send);
+ setTitle(getString(R.string.error_log_title));
+ Button cancelErrorLogButton = (Button) findViewById(R.id.cancelErrorLogButton);
+ Button sendErrorLogButton = (Button) findViewById(R.id.sendErrorLogButton);
+ TextView logTV = (TextView) findViewById(R.id.logTV);
+
+ Intent intent = getIntent();
+ String action = intent.getAction();
+ String type = intent.getType();
+
+ if (Intent.ACTION_SEND.equals(action) && type != null) {
+ mLogText = intent.getStringExtra(Intent.EXTRA_TEXT);
+ } else {
+ // Handle other intents, such as being started from the home screen
+ mLogText = "Error, nothing received!";
+ }
+
+ logTV.setText(mLogText);
+
+ cancelErrorLogButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finishAffinity();
+
+ }
+ });
+
+ sendErrorLogButton.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ sendMail();
+ }
+ });
+ }
+
+ /**
+ * Start activity for sending email with logs attached
+ */
+ private void sendMail() {
+ Intent sendIntent = new Intent();
+ sendIntent.setAction(Intent.ACTION_SEND);
+ sendIntent.putExtra(Intent.EXTRA_TEXT, mLogText);
+ sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ sendIntent.setType("text/plain");
+ startActivity(sendIntent);
+ }
+}
\ No newline at end of file
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.DialogFragment;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
*
* Shown when the error notification summarizing the list of errors is clicked by the user.
*/
-public class ErrorsWhileCopyingHandlerActivity extends ActionBarActivity
+public class ErrorsWhileCopyingHandlerActivity extends AppCompatActivity
implements OnClickListener {
private static final String TAG = ErrorsWhileCopyingHandlerActivity.class.getSimpleName();
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
-import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
-import android.widget.LinearLayout;
import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import com.owncloud.android.BuildConfig;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.operations.CreateShareOperation;
+import com.owncloud.android.lib.resources.status.OCCapability;
+import com.owncloud.android.operations.CreateShareViaLinkOperation;
+import com.owncloud.android.operations.CreateShareWithShareeOperation;
+import com.owncloud.android.operations.GetSharesForFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
import com.owncloud.android.operations.SynchronizeFolderOperation;
-import com.owncloud.android.operations.UnshareLinkOperation;
+import com.owncloud.android.operations.UnshareOperation;
+import com.owncloud.android.operations.UpdateShareViaLinkOperation;
import com.owncloud.android.services.OperationsService;
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
import com.owncloud.android.ui.NavigationDrawerItem;
import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter;
import com.owncloud.android.ui.dialog.LoadingDialog;
import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
-import com.owncloud.android.ui.fragment.FileDetailFragment;
-import com.owncloud.android.ui.fragment.FileFragment;
import com.owncloud.android.utils.ErrorMessageAdapter;
import java.util.ArrayList;
* Activity with common behaviour for activities handling {@link OCFile}s in ownCloud
* {@link Account}s .
*/
-public class FileActivity extends ActionBarActivity
+public class FileActivity extends AppCompatActivity
implements OnRemoteOperationListener, ComponentsGetter {
public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
public static final String EXTRA_ACCOUNT = "com.owncloud.android.ui.activity.ACCOUNT";
- public static final String EXTRA_WAITING_TO_PREVIEW =
- "com.owncloud.android.ui.activity.WAITING_TO_PREVIEW";
public static final String EXTRA_FROM_NOTIFICATION =
"com.owncloud.android.ui.activity.FROM_NOTIFICATION";
public static final String TAG = FileActivity.class.getSimpleName();
private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
+
private static final String KEY_WAITING_FOR_OP_ID = "WAITING_FOR_OP_ID";
private static final String DIALOG_SHARE_PASSWORD = "DIALOG_SHARE_PASSWORD";
private static final String KEY_TRY_SHARE_AGAIN = "TRY_SHARE_AGAIN";
private static final String KEY_ACTION_BAR_TITLE = "ACTION_BAR_TITLE";
- protected static final long DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS = 200;
+ protected static final long DELAY_TO_REQUEST_OPERATIONS_LATER = 200;
/** OwnCloud {@link Account} where the main {@link OCFile} handled by the activity is located.*/
private Account mAccount;
- /** Main {@link OCFile} handled by the activity.*/
+ /** Capabilites of the server where {@link #mAccount} lives */
+ private OCCapability mCapabilities;
+
+ /** Main {@link OCFile} handled by the activity.*/
private OCFile mFile;
+
/** Flag to signal that the activity will is finishing to enforce the creation of an ownCloud
* {@link Account} */
private boolean mRedirectingToSetupAccount = false;
private OperationsServiceBinder mOperationsServiceBinder = null;
+ private boolean mResumed = false;
+
protected FileDownloaderBinder mDownloaderBinder = null;
protected FileUploaderBinder mUploaderBinder = null;
private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null;
- private boolean mTryShareAgain = false;
-
// Navigation Drawer
protected DrawerLayout mDrawerLayout;
protected ActionBarDrawerToggle mDrawerToggle;
protected NavigationDrawerListAdapter mNavigationDrawerAdapter = null;
+
// TODO re-enable when "Accounts" is available in Navigation Drawer
// protected boolean mShowAccounts = false;
mFileOperationsHelper.setOpIdWaitingFor(
savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID, Long.MAX_VALUE)
);
- mTryShareAgain = savedInstanceState.getBoolean(KEY_TRY_SHARE_AGAIN);
- getSupportActionBar().setTitle(savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setTitle(savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
+ }
} else {
account = getIntent().getParcelableExtra(FileActivity.EXTRA_ACCOUNT);
mFile = getIntent().getParcelableExtra(FileActivity.EXTRA_FILE);
@Override
protected void onResume() {
super.onResume();
-
+ mResumed = true;
if (mOperationsServiceBinder != null) {
doOnResumeAndBound();
}
if (mOperationsServiceBinder != null) {
mOperationsServiceBinder.removeOperationListener(this);
}
-
+ mResumed = false;
super.onPause();
}
// Sync the toggle state after onRestoreInstanceState has occurred.
if (mDrawerToggle != null) {
mDrawerToggle.syncState();
- if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+ if (isDrawerOpen()) {
getSupportActionBar().setTitle(R.string.app_name);
mDrawerToggle.setDrawerIndicatorEnabled(true);
}
}
}
+ @Override
+ public void onBackPressed() {
+ if (isDrawerOpen()) {
+ closeNavDrawer();
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ /**
+ * checks if the drawer exists and is opened.
+ *
+ * @return <code>true</code> if the drawer is open, else <code>false</code>
+ */
+ public boolean isDrawerOpen() {
+ if(mDrawerLayout != null) {
+ return mDrawerLayout.isDrawerOpen(GravityCompat.START);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * closes the navigation drawer.
+ */
+ public void closeNavDrawer() {
+ if(mDrawerLayout != null) {
+ mDrawerLayout.closeDrawer(GravityCompat.START);
+ }
+ }
+
protected void initDrawer(){
// constant settings for action bar when navigation drawer is inited
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// Notification Drawer
- LinearLayout navigationDrawerLayout = (LinearLayout) findViewById(R.id.left_drawer);
+ RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer);
mDrawerList = (ListView) navigationDrawerLayout.findViewById(R.id.drawer_list);
// TODO re-enable when "Accounts" is available in Navigation Drawer
// username.setText(account.name.substring(0, lastAtPos));
// }
+ // Display username in drawer
+ setUsernameInDrawer(navigationDrawerLayout, AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()));
+
// load slide menu items
mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
// mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0],
// mDrawerContentDescriptions[0]));
// All Files
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0]));
+ mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0],
+ R.drawable.ic_folder_open));
- // TODO Enable when "On Device" is recovered
// On Device
- //mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2],
- // mDrawerContentDescriptions[2]));
+ mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1],
+ R.drawable.ic_action_download_grey));
// Settings
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1]));
+ mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2], mDrawerContentDescriptions[2],
+ R.drawable.ic_action_settings));
// Logs
if (BuildConfig.DEBUG) {
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2],
- mDrawerContentDescriptions[2]));
+ mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[3],
+ mDrawerContentDescriptions[3],R.drawable.ic_log));
}
// setting the nav drawer list adapter
mDrawerItems);
mDrawerList.setAdapter(mNavigationDrawerAdapter);
- mDrawerToggle = new ActionBarDrawerToggle(
- this,
- mDrawerLayout,
- R.drawable.ic_drawer,
- R.string.app_name,
- R.string.drawer_close) {
+
+ mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.drawer_open,R.string.drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
};
-
- //mDrawerToggle.setDrawerIndicatorEnabled(true);
+
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
+ mDrawerToggle.setDrawerIndicatorEnabled(false);
+ }
+
+ /**
+ * sets the given account name in the drawer in case the drawer is available. The account name
+ * is shortened beginning from the @-sign in the username.
+ *
+ * @param navigationDrawerLayout the drawer layout to be used
+ * @param account the account to be set in the drawer
+ */
+ protected void setUsernameInDrawer(RelativeLayout navigationDrawerLayout, Account account) {
+ if (navigationDrawerLayout != null && getAccount() != null) {
+ TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
+ int lastAtPos = account.name.lastIndexOf("@");
+ username.setText(account.name.substring(0, lastAtPos));
+ }
}
/**
*/
private void swapToDefaultAccount() {
// default to the most recently used account
- Account newAccount = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
+ Account newAccount = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
if (newAccount == null) {
/// no account available: force account creation
createFirstAccount();
outState.putParcelable(FileActivity.EXTRA_FILE, mFile);
outState.putBoolean(FileActivity.EXTRA_FROM_NOTIFICATION, mFromNotification);
outState.putLong(KEY_WAITING_FOR_OP_ID, mFileOperationsHelper.getOpIdWaitingFor());
- outState.putBoolean(KEY_TRY_SHARE_AGAIN, mTryShareAgain);
- outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString());
+ if(getSupportActionBar() != null && getSupportActionBar().getTitle() != null) {
+ // Null check in case the actionbar is used in ActionBar.NAVIGATION_MODE_LIST
+ // since it doesn't have a title then
+ outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString());
+ }
}
mAccount = account;
}
+
+ /**
+ * Getter for the capabilities of the server where the current OC account lives.
+ *
+ * @return Capabilities of the server where the current OC account lives. Null if the account is not
+ * set yet.
+ */
+ public OCCapability getCapabilities() {
+ return mCapabilities;
+ }
+
+
/**
* @return Value of mFromNotification: True if the Activity is launched by a notification
*/
}
/**
- * @return 'True' when the Activity is finishing to enforce the setup of a new account.
+ * @return 'True' when the Activity is finishing to enforce the setup of a new account.
*/
protected boolean isRedirectingToSetupAccount() {
return mRedirectingToSetupAccount;
}
- public boolean isTryShareAgain(){
- return mTryShareAgain;
- }
-
- public void setTryShareAgain(boolean tryShareAgain) {
- mTryShareAgain = tryShareAgain;
- }
-
public OperationsServiceBinder getOperationsServiceBinder() {
return mOperationsServiceBinder;
}
protected void onAccountSet(boolean stateWasRecovered) {
if (getAccount() != null) {
mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
+ mCapabilities = mStorageManager.getCapability(mAccount.name);
} else {
Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!");
mFileOperationsHelper.setOpIdWaitingFor(Long.MAX_VALUE);
+ dismissLoadingDialog();
+
if (!result.isSuccess() && (
result.getCode() == ResultCode.UNAUTHORIZED ||
result.isIdPRedirection() ||
Toast.LENGTH_LONG);
t.show();
}
- mTryShareAgain = false;
- } else if (operation instanceof CreateShareOperation) {
- onCreateShareOperationFinish((CreateShareOperation) operation, result);
+ } else if (operation == null ||
+ operation instanceof CreateShareWithShareeOperation ||
+ operation instanceof UnshareOperation ||
+ operation instanceof SynchronizeFolderOperation ||
+ operation instanceof UpdateShareViaLinkOperation
+ ) {
+ if (result.isSuccess()) {
+ updateFileFromDB();
- } else if (operation instanceof UnshareLinkOperation) {
- onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result);
+ } else if (result.getCode() != ResultCode.CANCELLED) {
+ Toast t = Toast.makeText(this,
+ ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+ Toast.LENGTH_LONG);
+ t.show();
+ }
- } else if (operation instanceof SynchronizeFolderOperation) {
- onSynchronizeFolderOperationFinish((SynchronizeFolderOperation)operation, result);
+ } else if (operation instanceof CreateShareViaLinkOperation) {
+ onCreateShareViaLinkOperationFinish((CreateShareViaLinkOperation) operation, result);
- }else if (operation instanceof SynchronizeFileOperation) {
- onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
+ } else if (operation instanceof SynchronizeFileOperation) {
+ onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
+ } else if (operation instanceof GetSharesForFileOperation) {
+ if (result.isSuccess() || result.getCode() == ResultCode.SHARE_NOT_FOUND) {
+ updateFileFromDB();
+
+ } else {
+ Toast t = Toast.makeText(this,
+ ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+ Toast.LENGTH_LONG);
+ t.show();
+ }
}
}
}
- private void onCreateShareOperationFinish(CreateShareOperation operation,
- RemoteOperationResult result) {
- dismissLoadingDialog();
+
+ private void onCreateShareViaLinkOperationFinish(CreateShareViaLinkOperation operation,
+ RemoteOperationResult result) {
if (result.isSuccess()) {
- mTryShareAgain = false;
updateFileFromDB();
- Intent sendIntent = operation.getSendIntent();
- startActivity(sendIntent);
+ Intent sendIntent = operation.getSendIntentWithSubject(this);
+ if (sendIntent != null) {
+ startActivity(sendIntent);
+ }
+
} else {
// Detect Failure (403) --> needs Password
if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
- if (!isTryShareAgain()) {
+ String password = operation.getPassword();
+ if ((password == null || password.length() == 0) &&
+ getCapabilities().getFilesSharingPublicEnabled().isUnknown())
+ {
+ // Was tried without password, but not sure that it's optional. Try with password.
+ // Try with password before giving up.
+ // See also ShareFileFragment#OnShareViaLinkListener
SharePasswordDialogFragment dialog =
- SharePasswordDialogFragment.newInstance(new OCFile(operation.getPath()),
- operation.getSendIntent());
+ SharePasswordDialogFragment.newInstance(new OCFile(operation.getPath()), true);
dialog.show(getSupportFragmentManager(), DIALOG_SHARE_PASSWORD);
} else {
Toast t = Toast.makeText(this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
Toast.LENGTH_LONG);
t.show();
- mTryShareAgain = false;
}
} else {
Toast t = Toast.makeText(this,
}
}
-
- private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
- RemoteOperationResult result) {
- dismissLoadingDialog();
-
- if (result.isSuccess()){
- updateFileFromDB();
-
- } else {
- Toast t = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
- operation, getResources()), Toast.LENGTH_LONG);
- t.show();
- }
- }
-
- private void onSynchronizeFolderOperationFinish(
- SynchronizeFolderOperation operation, RemoteOperationResult result
- ) {
- if (!result.isSuccess() && result.getCode() != ResultCode.CANCELLED){
- Toast t = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
- operation, getResources()), Toast.LENGTH_LONG);
- t.show();
- }
- }
-
private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
RemoteOperationResult result) {
- dismissLoadingDialog();
OCFile syncedFile = operation.getLocalFile();
if (!result.isSuccess()) {
if (result.getCode() == ResultCode.SYNC_CONFLICT) {
/**
* Show loading dialog
*/
- public void showLoadingDialog() {
+ public void showLoadingDialog(String message) {
// Construct dialog
- LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment));
+ LoadingDialog loading = new LoadingDialog(message);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
loading.show(ft, DIALOG_WAIT_TAG);
/**
* Dismiss loading dialog
*/
- public void dismissLoadingDialog(){
+ public void dismissLoadingDialog() {
Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
if (frag != null) {
+ Log_OC.d(TAG, "dismiss loading dialog");
LoadingDialog loading = (LoadingDialog) frag;
loading.dismiss();
}
/*if (!mOperationsServiceBinder.isPerformingBlockingOperation()) {
dismissLoadingDialog();
}*/
- doOnResumeAndBound();
+ if (mResumed) {
+ doOnResumeAndBound();
+ }
} else {
return;
startActivity(i);
}
+ public void refresh(){
+ Intent i = new Intent(this, FileDisplayActivity.class);
+ i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(i);
+ }
+
// TODO re-enable when "Accounts" is available in Navigation Drawer
// public void closeDrawer() {
// mDrawerLayout.closeDrawers();
restart();
}
+ public void refreshDirectory(){
+ // overridden by FileDisplayActivity
+ }
+
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// break;
case 0: // All Files
- allFilesOption();
+ MainApp.showOnlyFilesOnDevice(false);
+ refreshDirectory();
mDrawerLayout.closeDrawers();
break;
- // TODO Enable when "On Device" is recovered ?
-// case 2:
-// MainApp.showOnlyFilesOnDevice(true);
-// mDrawerLayout.closeDrawers();
-// break;
+ case 1: // On Device
+ MainApp.showOnlyFilesOnDevice(true);
+ refreshDirectory();
+ mDrawerLayout.closeDrawers();
+ break;
- case 1: // Settings
+ case 2: // Settings
Intent settingsIntent = new Intent(getApplicationContext(),
Preferences.class);
startActivity(settingsIntent);
mDrawerLayout.closeDrawers();
break;
- case 2: // Logs
+ case 3: // Logs
Intent loggerIntent = new Intent(getApplicationContext(),
LogHistoryActivity.class);
startActivity(loggerIntent);
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.annotation.TargetApi;
-import android.app.AlertDialog;
+import android.os.Parcelable;
+import android.support.v7.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
+import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
+import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.Window;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.operations.CopyFileOperation;
import com.owncloud.android.operations.CreateFolderOperation;
-import com.owncloud.android.operations.CreateShareOperation;
import com.owncloud.android.operations.MoveFileOperation;
import com.owncloud.android.operations.RefreshFolderOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
-import com.owncloud.android.operations.UnshareLinkOperation;
import com.owncloud.android.services.observer.FileObserverService;
import com.owncloud.android.syncadapter.FileSyncAdapter;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
import com.owncloud.android.ui.preview.PreviewImageActivity;
import com.owncloud.android.ui.preview.PreviewImageFragment;
import com.owncloud.android.ui.preview.PreviewMediaFragment;
+import com.owncloud.android.ui.preview.PreviewTextFragment;
import com.owncloud.android.ui.preview.PreviewVideoActivity;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.ErrorMessageAdapter;
import com.owncloud.android.utils.UriUtils;
import java.io.File;
-
+import java.util.ArrayList;
+import java.util.Iterator;
/**
* Displays, what files the user has available in his ownCloud.
private boolean mDualPane;
private View mLeftFragmentContainer;
private View mRightFragmentContainer;
+ private ProgressBar mProgressBar;
private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS";
public static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;
public static final int ACTION_SELECT_MULTIPLE_FILES = 2;
public static final int ACTION_MOVE_FILES = 3;
+ public static final int ACTION_COPY_FILES = 4;
private static final String TAG = FileDisplayActivity.class.getSimpleName();
private static final String TAG_SECOND_FRAGMENT = "SECOND_FRAGMENT";
private OCFile mWaitingToPreview;
-
+
private boolean mSyncInProgress = false;
private static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";
- private static String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER";
+ public static String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER";
private static String DIALOG_UPLOAD_SOURCE = "DIALOG_UPLOAD_SOURCE";
private static String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED";
private OCFile mWaitingToSend;
+ private Menu mOptionsMenu;
+
-
@Override
protected void onCreate(Bundle savedInstanceState) {
Log_OC.v(TAG, "onCreate() start");
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account
// is valid
Intent initObserversIntent = FileObserverService.makeInitIntent(this);
startService(initObserversIntent);
}
-
+
/// Load of saved instance state
if(savedInstanceState != null) {
mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(
mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
mWaitingToSend = (OCFile) savedInstanceState.getParcelable(
FileDisplayActivity.KEY_WAITING_TO_SEND);
-
} else {
mWaitingToPreview = null;
mSyncInProgress = false;
mWaitingToSend = null;
- }
+ }
/// USER INTERFACE
// Inflate and set the layout view
setContentView(R.layout.files);
-
+
// Navigation Drawer
initDrawer();
+ mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
+ mProgressBar.setIndeterminateDrawable(
+ ContextCompat.getDrawable(this,
+ R.drawable.actionbar_progress_indeterminate_horizontal));
+
mDualPane = getResources().getBoolean(R.bool.large_land_layout);
mLeftFragmentContainer = findViewById(R.id.left_fragment_container);
mRightFragmentContainer = findViewById(R.id.right_fragment_container);
// according to the official
// documentation
- setSupportProgressBarIndeterminateVisibility(mSyncInProgress
- /*|| mRefreshSharesInProgress*/);
+ // enable ActionBar app icon to behave as action to toggle nav drawer
+ //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setHomeButtonEnabled(true);
+
+ mProgressBar.setIndeterminate(mSyncInProgress);
// always AFTER setContentView(...) ; to work around bug in its implementation
-
+
setBackgroundText();
Log_OC.v(TAG, "onCreate() end");
protected void onStart() {
Log_OC.v(TAG, "onStart() start");
super.onStart();
- getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId());
Log_OC.v(TAG, "onStart() end");
}
@Override
+ protected void onStop() {
+ Log_OC.v(TAG, "onStop() start");
+ super.onStop();
+ Log_OC.v(TAG, "onStop() end");
+ }
+
+ @Override
protected void onDestroy() {
Log_OC.v(TAG, "onDestroy() start");
super.onDestroy();
}
/**
- * Called when the ownCloud {@link Account} associated to the Activity was just updated.
- */
+ * Called when the ownCloud {@link Account} associated to the Activity was just updated.
+ */
@Override
protected void onAccountSet(boolean stateWasRecovered) {
super.onAccountSet(stateWasRecovered);
file = getStorageManager().getFileByPath(OCFile.ROOT_PATH); // never returns null
}
setFile(file);
-
+
+ if (mAccountWasSet) {
+ setUsernameInDrawer((RelativeLayout) findViewById(R.id.left_drawer), getAccount());
+ }
+
if (!stateWasRecovered) {
Log_OC.d(TAG, "Initializing Fragments in onAccountChanged..");
initFragmentsWithFile();
if (file.isFolder()) {
startSyncFolderOperation(file, false);
}
-
+
} else {
updateFragmentsVisibility(!file.isFolder());
updateActionBarTitleAndHomeButton(file.isFolder() ? null : file);
}
}
-
private void createMinFragments() {
OCFileListFragment listOfFiles = new OCFileListFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES);
transaction.commit();
}
-
+
private void initFragmentsWithFile() {
if (getAccount() != null && getFile() != null) {
/// First fragment
- OCFileListFragment listOfFiles = getListOfFilesFragment();
+ OCFileListFragment listOfFiles = getListOfFilesFragment();
if (listOfFiles != null) {
- listOfFiles.listDirectory(getCurrentDir());
- // TODO Enable when "On Device" is recovered
- // listOfFiles.listDirectory(getCurrentDir(), MainApp.getOnlyOnDevice());
+ listOfFiles.listDirectory(getCurrentDir(), MainApp.getOnlyOnDevice());
} else {
Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
}
-
+
/// Second fragment
- OCFile file = getFile();
+ OCFile file = getFile();
Fragment secondFragment = chooseInitialSecondFragment(file);
if (secondFragment != null) {
setSecondFragment(secondFragment);
updateFragmentsVisibility(true);
updateActionBarTitleAndHomeButton(file);
-
+
} else {
cleanSecondFragment();
+ if (file.isDown() && PreviewTextFragment.canBePreviewed(file))
+ startTextPreview(file);
}
+ switchLayout(getFile());
+
} else {
Log_OC.wtf(TAG, "initFragments() called with invalid NULLs!");
if (getAccount() == null) {
}
}
+ private void switchLayout(OCFile file){
+ if (DisplayUtils.isGridView(file, getStorageManager())){
+ switchToGridView();
+ } else {
+ switchToListView();
+ }
+ }
+
private Fragment chooseInitialSecondFragment(OCFile file) {
Fragment secondFragment = null;
if (file != null && !file.isFolder()) {
- if (file.isDown() && PreviewMediaFragment.canBePreviewed(file)
+ if (file.isDown() && PreviewMediaFragment.canBePreviewed(file)
&& file.getLastSyncDateForProperties() > 0 // temporal fix
) {
int startPlaybackPosition =
secondFragment = new PreviewMediaFragment(file, getAccount(),
startPlaybackPosition, autoplay);
+ } else if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) {
+ secondFragment = null;
} else {
- secondFragment = FileDetailFragment.newInstance(file, getAccount());
- }
+ secondFragment = FileDetailFragment.newInstance(file, getAccount());
+ }
}
return secondFragment;
}
/**
* Replaces the second fragment managed by the activity with the received as
* a parameter.
- *
- * Assumes never will be more than two fragments managed at the same time.
- *
- * @param fragment New second Fragment to set.
+ * <p/>
+ * Assumes never will be more than two fragments managed at the same time.
+ *
+ * @param fragment New second Fragment to set.
*/
private void setSecondFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(
FileDisplayActivity.TAG_LIST_OF_FILES);
if (listOfFiles != null) {
- return (OCFileListFragment)listOfFiles;
+ return (OCFileListFragment) listOfFiles;
}
Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!");
return null;
Fragment second = getSupportFragmentManager().findFragmentByTag(
FileDisplayActivity.TAG_SECOND_FRAGMENT);
if (second != null) {
- return (FileFragment)second;
+ return (FileFragment) second;
}
return null;
}
protected void refreshListOfFilesFragment() {
OCFileListFragment fileListFragment = getListOfFilesFragment();
if (fileListFragment != null) {
- fileListFragment.listDirectory();
- // TODO Enable when "On Device" is recovered ?
- // fileListFragment.listDirectory(MainApp.getOnlyOnDevice());
+ fileListFragment.listDirectory(MainApp.getOnlyOnDevice());
}
}
if (PreviewMediaFragment.canBePreviewed(mWaitingToPreview)) {
startMediaPreview(mWaitingToPreview, 0, true);
detailsFragmentChanged = true;
+ } else if (PreviewTextFragment.canBePreviewed(mWaitingToPreview)) {
+ startTextPreview(mWaitingToPreview);
+ detailsFragmentChanged = true;
} else {
getFileOperationsHelper().openFile(mWaitingToPreview);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = mDrawerLayout.isDrawerOpen(GravityCompat.START);
- menu.findItem(R.id.action_upload).setVisible(!drawerOpen);
- menu.findItem(R.id.action_create_dir).setVisible(!drawerOpen);
menu.findItem(R.id.action_sort).setVisible(!drawerOpen);
menu.findItem(R.id.action_sync_account).setVisible(!drawerOpen);
+ menu.findItem(R.id.action_switch_view).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
+ menu.findItem(R.id.action_create_dir).setVisible(false);
+ mOptionsMenu = menu;
+
+ MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
+
+ changeGridIcon();
+
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
boolean retval = true;
switch (item.getItemId()) {
- case R.id.action_create_dir: {
- CreateFolderDialogFragment dialog =
- CreateFolderDialogFragment.newInstance(getCurrentDir());
- dialog.show(getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
- break;
- }
case R.id.action_sync_account: {
startSynchronization();
break;
}
- case R.id.action_upload: {
- UploadSourceDialogFragment dialog =
- UploadSourceDialogFragment.newInstance(getAccount());
- dialog.show(getSupportFragmentManager(), DIALOG_UPLOAD_SOURCE);
-
- break;
- }
case android.R.id.home: {
FileFragment second = getSecondFragment();
OCFile currentDir = getCurrentDir();
builder.create().show();
break;
}
+ case R.id.action_switch_view:{
+ if (isGridView()){
+ item.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
+ item.setIcon(ContextCompat.getDrawable(getApplicationContext(),
+ R.drawable.ic_view_module));
+ DisplayUtils.setViewMode(getFile(), false);
+ switchToListView();
+ } else {
+ item.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+ item.setIcon(ContextCompat.getDrawable(getApplicationContext(),
+ R.drawable.ic_view_list));
+ DisplayUtils.setViewMode(getFile(), true);
+ switchToGridView();
+ }
+
+ return true;
+ }
default:
retval = super.onOptionsItemSelected(item);
}
return retval;
}
+ public void createFolder() {
+ CreateFolderDialogFragment dialog =
+ CreateFolderDialogFragment.newInstance(getCurrentDir());
+ dialog.show(getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
+ }
+
+ public void uploadLocalFilesSelected() {
+ Intent action = new Intent(this, UploadFilesActivity.class);
+ action.putExtra(
+ UploadFilesActivity.EXTRA_ACCOUNT,
+ getAccount()
+ );
+ startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);
+ }
+
+ public void uploadFromOtherAppsSelected() {
+ Intent action = new Intent(Intent.ACTION_GET_CONTENT);
+ action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
+ //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
+ }
+ startActivityForResult(
+ Intent.createChooser(action, getString(R.string.upload_chooser_title)),
+ ACTION_SELECT_CONTENT_FROM_APPS
+ );
+ }
+
private void startSynchronization() {
Log_OC.d(TAG, "Got to start sync");
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) {
requestMultipleUpload(data, resultCode);
} else if (requestCode == ACTION_MOVE_FILES && resultCode == RESULT_OK){
+ final Intent fData = data;
+ final int fResultCode = resultCode;
+ getHandler().postDelayed(
+ new Runnable() {
+ @Override
+ public void run() {
+ requestMoveOperation(fData, fResultCode);
+ }
+ },
+ DELAY_TO_REQUEST_OPERATIONS_LATER
+ );
+
+ } else if (requestCode == ACTION_COPY_FILES && resultCode == RESULT_OK) {
final Intent fData = data;
- final int fResultCode = resultCode;
+ final int fResultCode = resultCode;
getHandler().postDelayed(
- new Runnable() {
- @Override
- public void run() {
- requestMoveOperation(fData, fResultCode);
- }
- },
- DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
+ new Runnable() {
+ @Override
+ public void run() {
+ requestCopyOperation(fData, fResultCode);
+ }
+ },
+ DELAY_TO_REQUEST_OPERATIONS_LATER
);
} else {
/**
* Request the operation for moving the file/folder from one path to another
- *
- * @param data Intent received
- * @param resultCode Result code received
+ *
+ * @param data Intent received
+ * @param resultCode Result code received
*/
private void requestMoveOperation(Intent data, int resultCode) {
OCFile folderToMoveAt = (OCFile) data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
- OCFile targetFile = (OCFile) data.getParcelableExtra(FolderPickerActivity.EXTRA_FILE);
- getFileOperationsHelper().moveFile(folderToMoveAt, targetFile);
+
+ ArrayList<OCFile> files = data.getParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES);
+
+ for (Parcelable file : files) {
+ getFileOperationsHelper().moveFile(folderToMoveAt, (OCFile) file);
+ }
+ }
+
+ /**
+ * Request the operation for copying the file/folder from one path to another
+ *
+ * @param data Intent received
+ * @param resultCode Result code received
+ */
+ private void requestCopyOperation(Intent data, int resultCode) {
+ OCFile folderToMoveAt = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
+
+ ArrayList<OCFile> files = data.getParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES);
+
+ for (Parcelable file : files) {
+ getFileOperationsHelper().copyFile(folderToMoveAt, (OCFile) file);
+ }
}
@Override
public void onBackPressed() {
- OCFileListFragment listOfFiles = getListOfFilesFragment();
- if (mDualPane || getSecondFragment() == null) {
- OCFile currentDir = getCurrentDir();
- if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) {
- finish();
- return;
+ boolean isFabOpen = isFabOpen();
+ boolean isDrawerOpen = isDrawerOpen();
+
+ /*
+ * BackPressed priority/hierarchy:
+ * 1. close drawer if opened
+ * 2. close FAB if open (only if drawer isn't open)
+ * 3. navigate up (only if drawer and FAB aren't open)
+ */
+ if(isDrawerOpen && isFabOpen) {
+ // close drawer first
+ super.onBackPressed();
+ } else if(isDrawerOpen && !isFabOpen) {
+ // close drawer
+ super.onBackPressed();
+ } else if (!isDrawerOpen && isFabOpen) {
+ // close fab
+ getListOfFilesFragment().getFabMain().collapse();
+ } else {
+ // all closed
+ OCFileListFragment listOfFiles = getListOfFilesFragment();
+ if (mDualPane || getSecondFragment() == null) {
+ OCFile currentDir = getCurrentDir();
+ if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) {
+ finish();
+ return;
+ }
+ if (listOfFiles != null) { // should never be null, indeed
+ listOfFiles.onBrowseUp();
+ }
}
if (listOfFiles != null) { // should never be null, indeed
- listOfFiles.onBrowseUp();
+ setFile(listOfFiles.getCurrentFile());
}
+ cleanSecondFragment();
+ changeGridIcon();
}
- if (listOfFiles != null) { // should never be null, indeed
- setFile(listOfFiles.getCurrentFile());
- }
- cleanSecondFragment();
+ }
+ private void changeGridIcon(){
+ MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
+ if (DisplayUtils.isGridView(getFile(), getStorageManager())){
+ menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+ menuItem.setIcon(ContextCompat.getDrawable(getApplicationContext(),
+ R.drawable.ic_view_list));
+ } else {
+ menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
+ menuItem.setIcon(ContextCompat.getDrawable(getApplicationContext(),
+ R.drawable.ic_view_module));
+ }
}
@Override
Log_OC.v(TAG, "onSaveInstanceState() end");
}
-
@Override
protected void onResume() {
Log_OC.v(TAG, "onResume() start");
super.onResume();
-
// refresh Navigation Drawer account list
mNavigationDrawerAdapter.updateAccountList();
-
// refresh list of files
refreshListOfFilesFragment();
downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
mDownloadFinishReceiver = new DownloadFinishReceiver();
registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
-
+
Log_OC.v(TAG, "onResume() end");
+
}
unregisterReceiver(mDownloadFinishReceiver);
mDownloadFinishReceiver = null;
}
-
+
super.onPause();
Log_OC.v(TAG, "onPause() end");
}
+ public boolean isFabOpen() {
+ if(getListOfFilesFragment() != null && getListOfFilesFragment().getFabMain() != null && getListOfFilesFragment().getFabMain().isExpanded()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
private class SyncBroadcastReceiver extends BroadcastReceiver {
FileSyncAdapter.EXTRA_RESULT);
boolean sameAccount = (getAccount() != null &&
accountName.equals(getAccount().name) && getStorageManager() != null);
-
+
if (sameAccount) {
-
+
if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
mSyncInProgress = true;
-
+
} else {
OCFile currentFile = (getFile() == null) ? null :
getStorageManager().getFileByPath(getFile().getRemotePath());
synchFolderRemotePath),
Toast.LENGTH_LONG)
.show();
+
browseToRoot();
-
+
} else {
if (currentFile == null && !getFile().isFolder()) {
// currently selected file was removed in the server, and now we
currentDir.getRemotePath().equals(synchFolderRemotePath)) {
OCFileListFragment fileListFragment = getListOfFilesFragment();
if (fileListFragment != null) {
- fileListFragment.listDirectory();
- // TODO Enable when "On Device" is recovered ?
- // fileListFragment.listDirectory(currentDir,
- // MainApp.getOnlyOnDevice());
+ fileListFragment.listDirectory(currentDir,
+ MainApp.getOnlyOnDevice());
}
}
setFile(currentFile);
}
-
+
mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) &&
!RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED
.equals(event));
if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED.
- equals(event) &&
- /// TODO refactor and make common
- synchResult != null && !synchResult.isSuccess() &&
- (synchResult.getCode() == ResultCode.UNAUTHORIZED ||
- synchResult.isIdPRedirection() ||
- (synchResult.isException() && synchResult.getException()
- instanceof AuthenticatorException))) {
+ equals(event) &&/// TODO refactor and make common
+
+ synchResult != null && !synchResult.isSuccess() &&
+ (synchResult.getCode() == ResultCode.UNAUTHORIZED ||
+ synchResult.isIdPRedirection() ||
+ (synchResult.isException() && synchResult.getException()
+ instanceof AuthenticatorException))) {
try {
new OwnCloudAccount(getAccount(), context);
client = (OwnCloudClientManagerFactory.getDefaultSingleton().
removeClientFor(ocAccount));
-
if (client != null) {
OwnCloudCredentials cred = client.getCredentials();
if (cred != null) {
}
}
+
}
removeStickyBroadcast(intent);
Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
- setSupportProgressBarIndeterminateVisibility(mSyncInProgress
- /*|| mRefreshSharesInProgress*/);
+ mProgressBar.setIndeterminate(mSyncInProgress);
+ //mProgressBar.setVisibility((mSyncInProgress) ? View.VISIBLE : View.INVISIBLE);
+ //setSupportProgressBarIndeterminateVisibility(mSyncInProgress
+ /*|| mRefreshSharesInProgress*/ //);
setBackgroundText();
-
+
}
-
+
if (synchResult != null) {
if (synchResult.getCode().equals(
RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) {
}
}
}
-
+
/**
* Show a text message on screen view for notifying user if content is
* loading or folder is empty
private class UploadFinishReceiver extends BroadcastReceiver {
/**
* Once the file upload has finished -> update view
- * @author David A. Velasco
+ *
+ * @author David A. Velasco
* {@link BroadcastReceiver} to enable upload feedback in UI
*/
@Override
public void onReceive(Context context, Intent intent) {
try {
- String uploadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
+ String uploadedRemotePath = intent.getStringExtra(FileUploader.EXTRA_REMOTE_PATH);
String accountName = intent.getStringExtra(FileUploader.ACCOUNT_NAME);
boolean sameAccount = getAccount() != null && accountName.equals(getAccount().name);
OCFile currentDir = getCurrentDir();
- boolean isDescendant = (currentDir != null) && (uploadedRemotePath != null) &&
+ boolean isDescendant = (currentDir != null) && (uploadedRemotePath != null) &&
(uploadedRemotePath.startsWith(currentDir.getRemotePath()));
-
+
if (sameAccount && isDescendant) {
- refreshListOfFilesFragment();
+ String linkedToRemotePath =
+ intent.getStringExtra(FileUploader.EXTRA_LINKED_TO_PATH);
+ if (linkedToRemotePath == null || isAscendant(linkedToRemotePath)) {
+ refreshListOfFilesFragment();
+ }
}
-
+
boolean uploadWasFine = intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT,
false);
boolean renamedInUpload = getFile().getRemotePath().
equals(intent.getStringExtra(FileUploader.EXTRA_OLD_REMOTE_PATH));
- boolean sameFile = getFile().getRemotePath().equals(uploadedRemotePath) ||
+ boolean sameFile = getFile().getRemotePath().equals(uploadedRemotePath) ||
renamedInUpload;
FileFragment details = getSecondFragment();
- boolean detailFragmentIsShown = (details != null &&
+ boolean detailFragmentIsShown = (details != null &&
details instanceof FileDetailFragment);
-
+
if (sameAccount && sameFile && detailFragmentIsShown) {
if (uploadWasFine) {
setFile(getStorageManager().getFileByPath(uploadedRemotePath));
if (renamedInUpload) {
String newName = (new File(uploadedRemotePath)).getName();
Toast msg = Toast.makeText(
- context,
+ context,
String.format(
- getString(R.string.filedetails_renamed_in_upload_msg),
- newName),
+ getString(R.string.filedetails_renamed_in_upload_msg),
+ newName),
Toast.LENGTH_LONG);
msg.show();
}
if (uploadWasFine || getFile().fileExists()) {
- ((FileDetailFragment)details).updateFileDetails(false, true);
+ ((FileDetailFragment) details).updateFileDetails(false, true);
} else {
cleanSecondFragment();
}
-
- // Force the preview if the file is an image
- if (uploadWasFine && PreviewImageFragment.canBePreviewed(getFile())) {
- startImagePreview(getFile());
- } // TODO what about other kind of previews?
+
+ // Force the preview if the file is an image or text file
+ if (uploadWasFine) {
+ OCFile ocFile = getFile();
+ if (PreviewImageFragment.canBePreviewed(ocFile))
+ startImagePreview(getFile());
+ else if (PreviewTextFragment.canBePreviewed(ocFile))
+ startTextPreview(ocFile);
+ // TODO what about other kind of previews?
+ }
}
-
+
+ mProgressBar.setIndeterminate(false);
} finally {
if (intent != null) {
removeStickyBroadcast(intent);
}
}
-
+
}
-
+
+ // TODO refactor this receiver, and maybe DownloadFinishReceiver; this method is duplicated :S
+ private boolean isAscendant(String linkedToRemotePath) {
+ OCFile currentDir = getCurrentDir();
+ return (
+ currentDir != null &&
+ currentDir.getRemotePath().startsWith(linkedToRemotePath)
+ );
+ }
+
+
}
/**
* Class waiting for broadcast events from the {@link FileDownloader} service.
- *
+ *
* Updates the UI when a download is started or finished, provided that it is relevant for the
* current folder.
*/
private class DownloadFinishReceiver extends BroadcastReceiver {
- //int refreshCounter = 0;
@Override
public void onReceive(Context context, Intent intent) {
try {
- boolean sameAccount = isSameAccount(context, intent);
+ boolean sameAccount = isSameAccount(intent);
String downloadedRemotePath =
intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
boolean isDescendant = isDescendant(downloadedRemotePath);
String linkedToRemotePath =
intent.getStringExtra(FileDownloader.EXTRA_LINKED_TO_PATH);
if (linkedToRemotePath == null || isAscendant(linkedToRemotePath)) {
- //Log_OC.v(TAG, "refresh #" + ++refreshCounter);
refreshListOfFilesFragment();
}
refreshSecondFragment(
intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false)
);
}
-
+
if (mWaitingToSend != null) {
mWaitingToSend =
getStorageManager().getFileByPath(mWaitingToSend.getRemotePath());
- if (mWaitingToSend.isDown()) {
+ if (mWaitingToSend.isDown()) {
sendDownloadedFile();
}
}
-
+
} finally {
if (intent != null) {
removeStickyBroadcast(intent);
);
}
- private boolean isSameAccount(Context context, Intent intent) {
+ private boolean isSameAccount(Intent intent) {
String accountName = intent.getStringExtra(FileDownloader.ACCOUNT_NAME);
return (accountName != null && getAccount() != null &&
accountName.equals(getAccount().name));
}
}
-
-
+
+
public void browseToRoot() {
- OCFileListFragment listOfFiles = getListOfFilesFragment();
+ OCFileListFragment listOfFiles = getListOfFilesFragment();
if (listOfFiles != null) { // should never be null, indeed
OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
- listOfFiles.listDirectory(root);
- // TODO Enable when "On Device" is recovered ?
- // listOfFiles.listDirectory(root, MainApp.getOnlyOnDevice());
+ listOfFiles.listDirectory(root, MainApp.getOnlyOnDevice());
setFile(listOfFiles.getCurrentFile());
startSyncFolderOperation(root, false);
}
cleanSecondFragment();
-
}
/**
* {@inheritDoc}
- *
+ * <p/>
* Updates action bar and second fragment, if in dual pane mode.
*/
@Override
cleanSecondFragment();
// Sync Folder
startSyncFolderOperation(directory, false);
+
+ MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
+
+ changeGridIcon();
+ switchLayout(directory);
}
/**
- * Shows the information of the {@link OCFile} received as a
+ * Shows the information of the {@link OCFile} received as a
* parameter in the second fragment.
- *
- * @param file {@link OCFile} whose details will be shown
+ *
+ * @param file {@link OCFile} whose details will be shown
*/
@Override
public void showDetails(OCFile file) {
}
-
@Override
protected ServiceConnection newTransferenceServiceConnection() {
return new ListServiceConnection();
}
- /** Defines callbacks for service binding, passed to bindService() */
+ /**
+ * Defines callbacks for service binding, passed to bindService()
+ */
private class ListServiceConnection implements ServiceConnection {
@Override
if (!mWaitingToPreview.isDown()) {
requestForDownload();
}
- }
+ }
} else if (component.equals(new ComponentName(FileDisplayActivity.this,
FileUploader.class))) {
}
// a new chance to get the mDownloadBinder through
// getFileDownloadBinder() - THIS IS A MESS
- OCFileListFragment listOfFiles = getListOfFilesFragment();
+ OCFileListFragment listOfFiles = getListOfFilesFragment();
if (listOfFiles != null) {
- listOfFiles.listDirectory();
- // TODO Enable when "On Device" is recovered ?
- // listOfFiles.listDirectory(MainApp.getOnlyOnDevice());
+ listOfFiles.listDirectory(MainApp.getOnlyOnDevice());
}
FileFragment secondFragment = getSecondFragment();
if (secondFragment != null && secondFragment instanceof FileDetailFragment) {
- FileDetailFragment detailFragment = (FileDetailFragment)secondFragment;
+ FileDetailFragment detailFragment = (FileDetailFragment) secondFragment;
detailFragment.listenForTransferProgress();
detailFragment.updateFileDetails(false, false);
}
mUploaderBinder = null;
}
}
- };
+ }
@Override
public void onSavedCertificate() {
/**
* Updates the view associated to the activity after the finish of some operation over files
* in the current account.
- *
- * @param operation Removal operation performed.
- * @param result Result of the removal.
+ *
+ * @param operation Removal operation performed.
+ * @param result Result of the removal.
*/
@Override
public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
super.onRemoteOperationFinish(operation, result);
-
+
if (operation instanceof RemoveFileOperation) {
onRemoveFileOperationFinish((RemoveFileOperation) operation, result);
} else if (operation instanceof RenameFileOperation) {
- onRenameFileOperationFinish((RenameFileOperation)operation, result);
+ onRenameFileOperationFinish((RenameFileOperation) operation, result);
} else if (operation instanceof SynchronizeFileOperation) {
- onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
+ onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
} else if (operation instanceof CreateFolderOperation) {
- onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
-
- } else if (operation instanceof CreateShareOperation) {
- onCreateShareOperationFinish((CreateShareOperation) operation, result);
-
- } else if (operation instanceof UnshareLinkOperation) {
- onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result);
-
+ onCreateFolderOperationFinish((CreateFolderOperation) operation, result);
+
} else if (operation instanceof MoveFileOperation) {
- onMoveFileOperationFinish((MoveFileOperation)operation, result);
- }
-
- }
+ onMoveFileOperationFinish((MoveFileOperation) operation, result);
-
- private void onCreateShareOperationFinish(CreateShareOperation operation,
- RemoteOperationResult result) {
- if (result.isSuccess()) {
- refreshShowDetails();
- refreshListOfFilesFragment();
+ } else if (operation instanceof CopyFileOperation) {
+ onCopyFileOperationFinish((CopyFileOperation) operation, result);
}
- }
-
- private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
- RemoteOperationResult result) {
- if (result.isSuccess()) {
- refreshShowDetails();
- refreshListOfFilesFragment();
-
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- cleanSecondFragment();
- refreshListOfFilesFragment();
- }
}
-
+
private void refreshShowDetails() {
FileFragment details = getSecondFragment();
if (details != null) {
OCFile file = details.getFile();
if (file != null) {
- file = getStorageManager().getFileByPath(file.getRemotePath());
+ file = getStorageManager().getFileByPath(file.getRemotePath());
if (details instanceof PreviewMediaFragment) {
// Refresh OCFile of the fragment
((PreviewMediaFragment) details).updateFile(file);
+ } else if (details instanceof PreviewTextFragment) {
+ // Refresh OCFile of the fragment
+ ((PreviewTextFragment) details).updateFile(file);
} else {
showDetails(file);
- }
+ }
}
invalidateOptionsMenu();
- }
+ }
}
-
+
/**
* Updates the view associated to the activity after the finish of an operation trying to
* remove a file.
*/
private void onRemoveFileOperationFinish(RemoveFileOperation operation,
RemoteOperationResult result) {
- dismissLoadingDialog();
-
Toast msg = Toast.makeText(this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
- Toast.LENGTH_LONG);
+ Toast.LENGTH_LONG);
msg.show();
-
+
if (result.isSuccess()) {
OCFile removedFile = operation.getFile();
FileFragment second = getSecondFragment();
if (second != null && removedFile.equals(second.getFile())) {
if (second instanceof PreviewMediaFragment) {
- ((PreviewMediaFragment)second).stopPreview(true);
+ ((PreviewMediaFragment) second).stopPreview(true);
}
setFile(getStorageManager().getFileById(removedFile.getParentId()));
cleanSecondFragment();
}
- if (getStorageManager().getFileById(removedFile.getParentId()).equals(getCurrentDir())) {
+ if (getStorageManager().getFileById(removedFile.getParentId()).equals(getCurrentDir())){
refreshListOfFilesFragment();
}
invalidateOptionsMenu();
}
}
}
-
-
+
+
/**
- * Updates the view associated to the activity after the finish of an operation trying to move a
+ * Updates the view associated to the activity after the finish of an operation trying to move a
* file.
- *
- * @param operation Move operation performed.
- * @param result Result of the move operation.
+ *
+ * @param operation Move operation performed.
+ * @param result Result of the move operation.
*/
private void onMoveFileOperationFinish(MoveFileOperation operation,
RemoteOperationResult result) {
if (result.isSuccess()) {
- dismissLoadingDialog();
refreshListOfFilesFragment();
} else {
- dismissLoadingDialog();
try {
- Toast msg = Toast.makeText(FileDisplayActivity.this,
- ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
- Toast.LENGTH_LONG);
+ Toast msg = Toast.makeText(FileDisplayActivity.this,
+ ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+ Toast.LENGTH_LONG);
msg.show();
} catch (NotFoundException e) {
- Log_OC.e(TAG, "Error while trying to show fail message " , e);
+ Log_OC.e(TAG, "Error while trying to show fail message ", e);
}
}
}
+ /**
+ * Updates the view associated to the activity after the finish of an operation trying to copy a
+ * file.
+ *
+ * @param operation Copy operation performed.
+ * @param result Result of the copy operation.
+ */
+ private void onCopyFileOperationFinish(CopyFileOperation operation, RemoteOperationResult result) {
+ if (result.isSuccess()) {
+ refreshListOfFilesFragment();
+ } else {
+ try {
+ Toast msg = Toast.makeText(FileDisplayActivity.this,
+ ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+ Toast.LENGTH_LONG);
+ msg.show();
+
+ } catch (NotFoundException e) {
+ Log_OC.e(TAG, "Error while trying to show fail message ", e);
+ }
+ }
+ }
/**
* Updates the view associated to the activity after the finish of an operation trying to rename
*/
private void onRenameFileOperationFinish(RenameFileOperation operation,
RemoteOperationResult result) {
- dismissLoadingDialog();
OCFile renamedFile = operation.getFile();
if (result.isSuccess()) {
FileFragment details = getSecondFragment();
renamedFile.equals(details.getFile())) {
((PreviewMediaFragment) details).updateFile(renamedFile);
if (PreviewMediaFragment.canBePreviewed(renamedFile)) {
- int position = ((PreviewMediaFragment)details).getPosition();
+ int position = ((PreviewMediaFragment) details).getPosition();
startMediaPreview(renamedFile, position, true);
} else {
getFileOperationsHelper().openFile(renamedFile);
}
+ } else if (details instanceof PreviewTextFragment &&
+ renamedFile.equals(details.getFile())) {
+ ((PreviewTextFragment) details).updateFile(renamedFile);
+ if (PreviewTextFragment.canBePreviewed(renamedFile)) {
+ startTextPreview(renamedFile);
+ } else {
+ getFileOperationsHelper().openFile(renamedFile);
+ }
}
}
-
+
if (getStorageManager().getFileById(renamedFile.getParentId()).equals(getCurrentDir())){
refreshListOfFilesFragment();
}
} else {
Toast msg = Toast.makeText(this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
- Toast.LENGTH_LONG);
+ Toast.LENGTH_LONG);
msg.show();
-
+
if (result.isSslRecoverableException()) {
mLastSslUntrustedServerResult = result;
showUntrustedCertDialog(mLastSslUntrustedServerResult);
OCFile syncedFile = operation.getLocalFile();
onTransferStateChanged(syncedFile, true, true);
invalidateOptionsMenu();
+ refreshShowDetails();
}
}
}
private void onCreateFolderOperationFinish(CreateFolderOperation operation,
RemoteOperationResult result) {
if (result.isSuccess()) {
- dismissLoadingDialog();
refreshListOfFilesFragment();
} else {
- dismissLoadingDialog();
try {
- Toast msg = Toast.makeText(FileDisplayActivity.this,
- ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
- Toast.LENGTH_LONG);
+ Toast msg = Toast.makeText(FileDisplayActivity.this,
+ ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+ Toast.LENGTH_LONG);
msg.show();
} catch (NotFoundException e) {
- Log_OC.e(TAG, "Error while trying to show fail message " , e);
+ Log_OC.e(TAG, "Error while trying to show fail message ", e);
}
}
}
-
+
/**
* {@inheritDoc}
*/
if (details != null && details instanceof FileDetailFragment &&
file.equals(details.getFile()) ) {
if (downloading || uploading) {
- ((FileDetailFragment)details).updateFileDetails(file, getAccount());
+ ((FileDetailFragment) details).updateFileDetails(file, getAccount());
} else {
if (!file.fileExists()) {
cleanSecondFragment();
} else {
- ((FileDetailFragment)details).updateFileDetails(false, true);
+ ((FileDetailFragment) details).updateFileDetails(false, true);
}
}
}
-
+
}
}
return null;
}
-
- public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) {
- long currentSyncTime = System.currentTimeMillis();
-
- mSyncInProgress = true;
-
- // perform folder synchronization
- RemoteOperation synchFolderOp = new RefreshFolderOperation( folder,
- currentSyncTime,
- false,
- getFileOperationsHelper().isSharedSupported(),
- ignoreETag,
- getStorageManager(),
- getAccount(),
- getApplicationContext()
+
+ /**
+ * Starts an operation to refresh the requested folder.
+ *
+ * The operation is run in a new background thread created on the fly.
+ *
+ * The refresh updates is a "light sync": properties of regular files in folder are updated (including
+ * associated shares), but not their contents. Only the contents of files marked to be kept-in-sync are
+ * synchronized too.
+ *
+ * @param folder Folder to refresh.
+ * @param ignoreETag If 'true', the data from the server will be fetched and sync'ed even if the eTag
+ * didn't change.
+ */
+ public void startSyncFolderOperation(final OCFile folder, final boolean ignoreETag) {
+
+ // the execution is slightly delayed to allow the activity get the window focus if it's being started
+ // or if the method is called from a dialog that is being dismissed
+ getHandler().postDelayed(
+ new Runnable() {
+ @Override
+ public void run() {
+ if (hasWindowFocus()) {
+ long currentSyncTime = System.currentTimeMillis();
+ mSyncInProgress = true;
+
+ // perform folder synchronization
+ RemoteOperation synchFolderOp = new RefreshFolderOperation(folder,
+ currentSyncTime,
+ false,
+ getFileOperationsHelper().isSharedSupported(),
+ ignoreETag,
+ getStorageManager(),
+ getAccount(),
+ getApplicationContext()
+ );
+ synchFolderOp.execute(
+ getAccount(),
+ MainApp.getAppContext(),
+ FileDisplayActivity.this,
+ null,
+ null
+ );
+
+ mProgressBar.setIndeterminate(true);
+
+ setBackgroundText();
+
+ } // else: NOTHING ; lets' not refresh when the user rotates the device but there is
+ // another window floating over
+ }
+ },
+ DELAY_TO_REQUEST_OPERATIONS_LATER
);
- synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null);
-
- setSupportProgressBarIndeterminateVisibility(true);
- setBackgroundText();
}
/**
- * Show untrusted cert dialog
+ * Show untrusted cert dialog
*/
public void showUntrustedCertDialog(RemoteOperationResult result) {
// Show a dialog with the certificate info
FragmentTransaction ft = fm.beginTransaction();
dialog.show(ft, DIALOG_UNTRUSTED_CERT);
}
-
+
private void requestForDownload(OCFile file) {
Account account = getAccount();
if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) {
startService(i);
}
}
-
- private void sendDownloadedFile(){
+
+ private void sendDownloadedFile() {
getFileOperationsHelper().sendDownloadedFile(mWaitingToSend);
mWaitingToSend = null;
}
-
+
/**
* Requests the download of the received {@link OCFile} , updates the UI
* to monitor the download progress and prepares the activity to send the file
* when the download finishes.
- *
- * @param file {@link OCFile} to download and preview.
+ *
+ * @param file {@link OCFile} to download and preview.
*/
public void startDownloadForSending(OCFile file) {
mWaitingToSend = file;
requestForDownload(mWaitingToSend);
- boolean hasSecondFragment = (getSecondFragment()!= null);
+ boolean hasSecondFragment = (getSecondFragment() != null);
updateFragmentsVisibility(hasSecondFragment);
}
-
+
/**
* Opens the image gallery showing the image {@link OCFile} received as parameter.
- *
- * @param file Image {@link OCFile} to show.
+ *
+ * @param file Image {@link OCFile} to show.
*/
public void startImagePreview(OCFile file) {
Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class);
showDetailsIntent.putExtra(EXTRA_FILE, file);
showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
startActivity(showDetailsIntent);
-
}
/**
* Stars the preview of an already down media {@link OCFile}.
- *
+ *
* @param file Media {@link OCFile} to preview.
* @param startPlaybackPosition Media position where the playback will be started,
* in milliseconds.
}
/**
+ * Stars the preview of a text file {@link OCFile}.
+ *
+ * @param file Text {@link OCFile} to preview.
+ */
+ public void startTextPreview(OCFile file) {
+ Bundle args = new Bundle();
+ args.putParcelable(EXTRA_FILE, file);
+ args.putParcelable(EXTRA_ACCOUNT, getAccount());
+ Fragment textPreviewFragment = Fragment.instantiate(getApplicationContext(),
+ PreviewTextFragment.class.getName(), args);
+ setSecondFragment(textPreviewFragment);
+ updateFragmentsVisibility(true);
+ //updateNavigationElementsInActionBar(file);
+ setFile(file);
+ }
+
+ /**
* Requests the download of the received {@link OCFile} , updates the UI
* to monitor the download progress and prepares the activity to preview
* or open the file when the download finishes.
- *
- * @param file {@link OCFile} to download and preview.
+ *
+ * @param file {@link OCFile} to download and preview.
*/
public void startDownloadForPreview(OCFile file) {
Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount());
public void cancelTransference(OCFile file) {
getFileOperationsHelper().cancelTransference(file);
- if (mWaitingToPreview != null &&
+ if (mWaitingToPreview != null &&
mWaitingToPreview.getRemotePath().equals(file.getRemotePath())) {
mWaitingToPreview = null;
}
}
}
- private void sortByDate(boolean ascending){
+ private void sortByDate(boolean ascending) {
getListOfFilesFragment().sortByDate(ascending);
}
- private void sortBySize(boolean ascending){
+ private void sortBySize(boolean ascending) {
getListOfFilesFragment().sortBySize(ascending);
}
- private void sortByName(boolean ascending){
+ private void sortByName(boolean ascending) {
getListOfFilesFragment().sortByName(ascending);
}
+ private boolean isGridView(){ return getListOfFilesFragment().isGridView(); }
+ private void switchToGridView() {
+ getListOfFilesFragment().switchToGridView();
+ }
+ private void switchToListView() {
+ getListOfFilesFragment().switchToListView();
+ }
public void allFilesOption() {
browseToRoot();
}
+
+ public void refreshDirectory(){
+ getListOfFilesFragment().refreshDirectory();
+ }
}
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
-import android.view.Window;
import android.widget.Button;
+import android.widget.ProgressBar;
import android.widget.Toast;
import com.owncloud.android.R;
import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
import com.owncloud.android.ui.fragment.FileFragment;
import com.owncloud.android.ui.fragment.OCFileListFragment;
-import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.ErrorMessageAdapter;
+import java.util.ArrayList;
+
public class FolderPickerActivity extends FileActivity implements FileFragment.ContainerActivity,
OnClickListener, OnEnforceableRefreshListener {
+ ".EXTRA_FOLDER";
public static final String EXTRA_FILE = UploadFilesActivity.class.getCanonicalName()
+ ".EXTRA_FILE";
+ public static final String EXTRA_FILES = UploadFilesActivity.class.getCanonicalName()
+ + ".EXTRA_FILES";
//TODO: Think something better
private SyncBroadcastReceiver mSyncBroadcastReceiver;
protected Button mCancelBtn;
protected Button mChooseBtn;
+ private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log_OC.d(TAG, "onCreate() start");
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- setSupportProgressBarIndeterminateVisibility(mSyncInProgress);
- // always AFTER setContentView(...) ; to work around bug in its implementation
+
+ mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
+ mProgressBar.setIndeterminateDrawable(
+ getResources().getDrawable(
+ R.drawable.actionbar_progress_indeterminate_horizontal));
+ mProgressBar.setIndeterminate(mSyncInProgress);
+ // always AFTER setContentView(...) ; to work around bug in its implementation
// sets message for empty list of folders
setBackgroundText();
Log_OC.d(TAG, "onCreate() end");
-
}
@Override
protected void onStart() {
super.onStart();
- getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId());
}
/**
if (!stateWasRecovered) {
OCFileListFragment listOfFolders = getListOfFilesFragment();
- listOfFolders.listDirectory(folder/*, false*/);
+ listOfFolders.listDirectory(folder, false);
startSyncFolderOperation(folder, false);
}
Bundle args = new Bundle();
args.putBoolean(OCFileListFragment.ARG_JUST_FOLDERS, true);
args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, false);
+ args.putBoolean(OCFileListFragment.ARG_HIDE_FAB, true);
listOfFiles.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_container, listOfFiles, TAG_LIST_OF_FOLDERS);
getApplicationContext()
);
synchFolderOp.execute(getAccount(), this, null, null);
-
- setSupportProgressBarIndeterminateVisibility(true);
+
+ mProgressBar.setIndeterminate(true);
setBackgroundText();
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
- menu.findItem(R.id.action_upload).setVisible(false);
menu.findItem(R.id.action_sort).setVisible(false);
return true;
}
protected void refreshListOfFilesFragment() {
OCFileListFragment fileListFragment = getListOfFilesFragment();
if (fileListFragment != null) {
- fileListFragment.listDirectory();
- // TODO Enable when "On Device" is recovered ?
- // fileListFragment.listDirectory(false);
+ fileListFragment.listDirectory(false);
}
}
OCFileListFragment listOfFiles = getListOfFilesFragment();
if (listOfFiles != null) { // should never be null, indeed
OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
- listOfFiles.listDirectory(root);
- // TODO Enable when "On Device" is recovered ?
- // listOfFiles.listDirectory(root, false);
+ listOfFiles.listDirectory(root, false);
setFile(listOfFiles.getCurrentFile());
updateNavigationElementsInActionBar();
startSyncFolderOperation(root, false);
actionBar.setDisplayHomeAsUpEnabled(!atRoot);
actionBar.setHomeButtonEnabled(!atRoot);
actionBar.setTitle(
- atRoot
- ? getString(R.string.default_display_name_for_root_folder)
- : currentDir.getFileName()
+ atRoot
+ ? getString(R.string.default_display_name_for_root_folder)
+ : currentDir.getFileName()
);
}
} else if (v == mChooseBtn) {
Intent i = getIntent();
Parcelable targetFile = i.getParcelableExtra(FolderPickerActivity.EXTRA_FILE);
+ ArrayList<Parcelable> targetFiles = i.getParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES);
Intent data = new Intent();
data.putExtra(EXTRA_FOLDER, getCurrentFolder());
if (targetFile != null) {
data.putExtra(EXTRA_FILE, targetFile);
}
+ if (targetFiles != null){
+ data.putParcelableArrayListExtra(EXTRA_FILES, targetFiles);
+ }
setResult(RESULT_OK, data);
finish();
}
super.onRemoteOperationFinish(operation, result);
if (operation instanceof CreateFolderOperation) {
- onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
+ onCreateFolderOperationFinish((CreateFolderOperation) operation, result);
}
}
) {
if (result.isSuccess()) {
- dismissLoadingDialog();
refreshListOfFilesFragment();
} else {
- dismissLoadingDialog();
try {
Toast msg = Toast.makeText(FolderPickerActivity.this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
equals(synchFolderRemotePath)) {
OCFileListFragment fileListFragment = getListOfFilesFragment();
if (fileListFragment != null) {
- fileListFragment.listDirectory(currentDir);
- // TODO Enable when "On Device" is recovered ?
- // fileListFragment.listDirectory(currentDir, false);
+ fileListFragment.listDirectory(currentDir, false);
}
}
setFile(currentFile);
}
removeStickyBroadcast(intent);
Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
- setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);
+
+ mProgressBar.setIndeterminate(mSyncInProgress);
setBackgroundText();
-
}
} catch (RuntimeException e) {
/**
- * Shows the information of the {@link OCFile} received as a
+ * Shows the information of the {@link OCFile} received as a
* parameter in the second fragment.
- *
+ *
* @param file {@link OCFile} whose details will be shown
*/
@Override
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.ViewGroup;
* Added to show explanations for notifications when the user clicks on them, and there no place
* better to show them.
*/
-public class GenericExplanationActivity extends ActionBarActivity {
+public class GenericExplanationActivity extends AppCompatActivity {
public static final String EXTRA_LIST = GenericExplanationActivity.class.getCanonicalName() +
".EXTRA_LIST";
} else {
listView.setVisibility(View.GONE);
}
-
- ActionBar actionBar = getSupportActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
}
public class ExplanationListAdapterView extends ArrayAdapter<String> {
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author Bartosz Przybylski
+ * Copyright (C) 2015 ownCloud Inc.
+ * Copyright (C) 2015 Bartosz Przybylski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+package com.owncloud.android.ui.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import com.owncloud.android.R;
+
+/**
+ * Created by Bartosz Przybylski on 07.11.2015.
+ */
+public class LocalDirectorySelectorActivity extends UploadFilesActivity {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mUploadBtn.setText(R.string.folder_picker_choose_button_text);
+ mRadioBtnCopyFiles.setVisibility(View.GONE);
+ mRadioBtnMoveFiles.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v.getId() == R.id.upload_files_btn_cancel) {
+ setResult(RESULT_CANCELED);
+ finish();
+
+ } else if (v.getId() == R.id.upload_files_btn_upload) {
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(EXTRA_CHOSEN_FILES, getInitialDirectory().getAbsolutePath());
+ setResult(RESULT_OK, resultIntent);
+ finish();
+ }
+ }
+}
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import com.owncloud.android.utils.FileStorageUtils;
-public class LogHistoryActivity extends ActionBarActivity {
+public class LogHistoryActivity extends AppCompatActivity {
private static final String MAIL_ATTACHMENT_TYPE = "text/plain";
setContentView(R.layout.log_send_file);
setTitle(getText(R.string.actionbar_logger));
- ActionBar actionBar = getSupportActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
- actionBar.setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton);
Button sendHistoryButton = (Button) findViewById(R.id.sendLogHistoryButton);
TextView logTV = (TextView) findViewById(R.id.logTV);
import java.util.Arrays;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.utils.DisplayUtils;
-
-public class PassCodeActivity extends ActionBarActivity {
+public class PassCodeActivity extends AppCompatActivity {
private static final String TAG = PassCodeActivity.class.getSimpleName();
- public final static String ACTION_ENABLE = PassCodeActivity.class.getCanonicalName() +
- ".ENABLE";
- public final static String ACTION_DISABLE = PassCodeActivity.class.getCanonicalName() +
- ".DISABLE";
- public final static String ACTION_REQUEST = PassCodeActivity.class.getCanonicalName() +
- ".REQUEST";
+ public final static String ACTION_REQUEST_WITH_RESULT = "ACTION_REQUEST_WITH_RESULT";
+ public final static String ACTION_CHECK_WITH_RESULT = "ACTION_CHECK_WITH_RESULT";
+ public final static String ACTION_CHECK = "ACTION_CHECK";
+
+ public final static String KEY_PASSCODE = "KEY_PASSCODE";
+ public final static String KEY_CHECK_RESULT = "KEY_CHECK_RESULT";
private Button mBCancel;
private TextView mPassCodeHdr;
private TextView mPassCodeHdrExplanation;
private EditText[] mPassCodeEditTexts = new EditText[4];
-
+
private String [] mPassCodeDigits = {"","","",""};
private static String KEY_PASSCODE_DIGITS = "PASSCODE_DIGITS";
private boolean mConfirmingPassCode = false;
mPassCodeEditTexts[2] = (EditText) findViewById(R.id.txt2);
mPassCodeEditTexts[3] = (EditText) findViewById(R.id.txt3);
- if (ACTION_REQUEST.equals(getIntent().getAction())) {
+ if (ACTION_CHECK.equals(getIntent().getAction())) {
/// this is a pass code request; the user has to input the right value
mPassCodeHdr.setText(R.string.pass_code_enter_pass_code);
mPassCodeHdrExplanation.setVisibility(View.INVISIBLE);
setCancelButtonEnabled(false); // no option to cancel
- } else if (ACTION_ENABLE.equals(getIntent().getAction())) {
+ } else if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction())) {
if (savedInstanceState != null) {
mConfirmingPassCode = savedInstanceState.getBoolean(PassCodeActivity.KEY_CONFIRMING_PASSCODE);
mPassCodeDigits = savedInstanceState.getStringArray(PassCodeActivity.KEY_PASSCODE_DIGITS);
setCancelButtonEnabled(true);
}
- } else if (ACTION_DISABLE.equals(getIntent().getAction())) {
+ } else if (ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) {
/// pass code preference has just been disabled in Preferences;
// will confirm user knows pass code, then remove it
mPassCodeHdr.setText(R.string.pass_code_remove_your_pass_code);
}
setTextListeners();
-
- ActionBar actionBar = getSupportActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
}
* the previously typed pass code, if any.
*/
private void processFullPassCode() {
- if (ACTION_REQUEST.equals(getIntent().getAction())) {
+ if (ACTION_CHECK.equals(getIntent().getAction())) {
if (checkPassCode()) {
/// pass code accepted in request, user is allowed to access the app
finish();
View.INVISIBLE);
}
- } else if (ACTION_DISABLE.equals(getIntent().getAction())) {
+ } else if (ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) {
if (checkPassCode()) {
- /// pass code accepted when disabling, pass code is removed
- SharedPreferences.Editor appPrefs = PreferenceManager
- .getDefaultSharedPreferences(getApplicationContext()).edit();
- appPrefs.putBoolean("set_pincode", false); // TODO remove; this should be
- // unnecessary, was done before entering in the activity
- appPrefs.commit();
-
- Toast.makeText(PassCodeActivity.this, R.string.pass_code_removed, Toast.LENGTH_LONG).show();
- finish();
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(KEY_CHECK_RESULT, true);
+ setResult(RESULT_OK, resultIntent);
+
+ finish();
} else {
showErrorAndRestart(R.string.pass_code_wrong, R.string.pass_code_enter_pass_code,
View.INVISIBLE);
}
- } else if (ACTION_ENABLE.equals(getIntent().getAction())) {
+ } else if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction())) {
/// enabling pass code
if (!mConfirmingPassCode) {
requestPassCodeConfirmation();
/**
* Overrides click on the BACK arrow to correctly cancel ACTION_ENABLE or ACTION_DISABLE, while
- * preventing than ACTION_REQUEST may be worked around.
+ * preventing than ACTION_CHECK may be worked around.
*
* @param keyCode Key code of the key that triggered the down event.
* @param event Event triggered.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()== 0){
- if (ACTION_ENABLE.equals(getIntent().getAction()) ||
- ACTION_DISABLE.equals(getIntent().getAction())) {
+ if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction()) ||
+ ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) {
revertActionAndExit();
}
return true;
protected void savePassCodeAndExit() {
SharedPreferences.Editor appPrefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext()).edit();
-
- appPrefs.putString("PrefPinCode1", mPassCodeDigits[0]);
- appPrefs.putString("PrefPinCode2", mPassCodeDigits[1]);
- appPrefs.putString("PrefPinCode3", mPassCodeDigits[2]);
- appPrefs.putString("PrefPinCode4", mPassCodeDigits[3]);
- appPrefs.putBoolean("set_pincode", true); /// TODO remove; unnecessary,
- // Preferences did it before entering here
- appPrefs.commit();
-
- Toast.makeText(this, R.string.pass_code_stored, Toast.LENGTH_LONG).show();
+
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(KEY_PASSCODE,
+ mPassCodeDigits[0] + mPassCodeDigits[1] + mPassCodeDigits[2] + mPassCodeDigits[3]);
+
+ setResult(RESULT_OK, resultIntent);
finish();
}
outState.putStringArray(PassCodeActivity.KEY_PASSCODE_DIGITS, mPassCodeDigits);
}
-
private class PassCodeDigitTextWatcher implements TextWatcher {
private int mIndex = -1;
}
-
}
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
import android.net.Uri;
-import android.os.Build;
+import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
-//import android.support.v7.app.ActionBar;
-import android.app.ActionBar;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.Nullable;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatDelegate;
+import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
+import android.widget.Toast;
import com.owncloud.android.BuildConfig;
import com.owncloud.android.MainApp;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.db.DbHandler;
import com.owncloud.android.files.FileOperationsHelper;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.ui.PreferenceWithLongSummary;
import com.owncloud.android.ui.RadioButtonPreference;
import com.owncloud.android.utils.DisplayUtils;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.concurrent.ExecutionException;
+import java.io.File;
+
/**
* An Activity that allows the user to change the application's settings.
+ *
+ * It proxies the necessary calls via {@link android.support.v7.app.AppCompatDelegate} to be used
+ * with AppCompat.
*/
public class Preferences extends PreferenceActivity
implements AccountManagerCallback<Boolean>, ComponentsGetter {
private static final int ACTION_SELECT_UPLOAD_PATH = 1;
private static final int ACTION_SELECT_UPLOAD_VIDEO_PATH = 2;
+ private static final int ACTION_REQUEST_PASSCODE = 5;
+ private static final int ACTION_CONFIRM_PASSCODE = 6;
+ private static final int ACTION_SELECT_STORAGE_PATH = 3;
+ private static final int ACTION_PERFORM_MIGRATION = 4;
private DbHandler mDbHandler;
private CheckBoxPreference pCode;
private Preference pAboutApp;
+ private AppCompatDelegate mDelegate;
private PreferenceCategory mAccountsPrefCategory = null;
private final Handler mHandler = new Handler();
private String mUploadPath;
private PreferenceCategory mPrefInstantUploadCategory;
private Preference mPrefInstantUpload;
+ private Preference mPrefInstantUploadBehaviour;
private Preference mPrefInstantUploadPath;
private Preference mPrefInstantUploadPathWiFi;
private Preference mPrefInstantVideoUpload;
protected FileDownloader.FileDownloaderBinder mDownloaderBinder = null;
protected FileUploader.FileUploaderBinder mUploaderBinder = null;
private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null;
+ private PreferenceWithLongSummary mPrefStoragePath;
+ private String mStoragePath;
+
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
+ getDelegate().installViewFactory();
+ getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
mDbHandler = new DbHandler(getBaseContext());
addPreferencesFromResource(R.xml.preferences);
- // Set properties of Action Bar in an ugly workaround to build correctly without
- // upgrading minSdk
- // TODO : increase minSdk; scheduled for next realease, don't wont to mix with this US
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- ActionBar actionBar = getActionBar();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
- }
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setTitle(R.string.actionbar_settings);
- } else {
- setTitle(R.string.actionbar_settings);
- }
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setTitle(R.string.actionbar_settings);
// For adding content description tag to a title field in the action bar
int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android");
mShowContextMenu = true;
mAccountName = ((RadioButtonPreference) obj).getKey();
- Preferences.this.openContextMenu(listView);
+ String[] items = {
+ getResources().getString(R.string.change_password),
+ getResources().getString(R.string.delete_account)
+ };
+ final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Preferences.this);
+ View convertView = getLayoutInflater().inflate(R.layout.alert_dialog_list_view, null);
+ alertDialogBuilder.setView(convertView);
+ ListView lv = (ListView) convertView.findViewById(R.id.list);
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(
+ Preferences.this,R.layout.simple_dialog_list_item,items);
+ lv.setAdapter(adapter);
+
+ //Setup proper inline listener
+ final AlertDialog alertDialog = alertDialogBuilder.create();
+ lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
+ Account accounts[] = am.getAccountsByType(MainApp.getAccountType());
+ for (Account a : accounts) {
+ if (a.name.equals(mAccountName)) {
+ if (position==0) {
+
+ // Change account password
+ Intent updateAccountCredentials = new Intent(Preferences.this, AuthenticatorActivity.class);
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, a);
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION,
+ AuthenticatorActivity.ACTION_UPDATE_TOKEN);
+ startActivity(updateAccountCredentials);
+ alertDialog.cancel();
+
+ } else if (position==1) {
+
+ // Remove account
+ am.removeAccount(a, Preferences.this, mHandler);
+ Log_OC.d(TAG, "Remove an account " + a.name);
+ alertDialog.cancel();
+ }
+ }
+ }
+ }
+ });
+ alertDialog.show();
View.OnLongClickListener longListener = (View.OnLongClickListener) obj;
return longListener.onLongClick(view);
registerForContextMenu(getListView());
pCode = (CheckBoxPreference) findPreference("set_pincode");
- if (pCode != null){
+ if (pCode != null) {
pCode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
- Boolean enable = (Boolean) newValue;
+ Boolean incoming = (Boolean) newValue;
+
i.setAction(
- enable.booleanValue() ? PassCodeActivity.ACTION_ENABLE :
- PassCodeActivity.ACTION_DISABLE
+ incoming.booleanValue() ? PassCodeActivity.ACTION_REQUEST_WITH_RESULT :
+ PassCodeActivity.ACTION_CHECK_WITH_RESULT
);
- startActivity(i);
-
- return true;
+
+ startActivityForResult(i, incoming.booleanValue() ? ACTION_REQUEST_PASSCODE :
+ ACTION_CONFIRM_PASSCODE);
+
+ // Don't update just yet, we will decide on it in onActivityResult
+ return false;
}
- });
+ });
}
+ final Preference pCacheSize = findPreference("pref_cache_size");
+ if (pCacheSize != null){
+ final SharedPreferences appPrefs =
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ Long cacheSize = ThumbnailsCacheManager.getMaxSize();
+ pCacheSize.setSummary(cacheSize + " Mb");
+ pCacheSize.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ int size = Integer.decode((String) newValue);
+ if (ThumbnailsCacheManager.setMaxSize(size)){
+ appPrefs.edit().putInt("pref_cache_size", size);
+ pCacheSize.setSummary(size + " MB");
+ return true;
+ } else {
+ return false;
+ }
+ }
+ });
+ }
+
PreferenceCategory preferenceCategory = (PreferenceCategory) findPreference("more");
boolean helpEnabled = getResources().getBoolean(R.bool.help_enabled);
- Preference pHelp = findPreference("help");
+ Preference pHelp = findPreference("help");
if (pHelp != null ){
if (helpEnabled) {
pHelp.setOnPreferenceClickListener(new OnPreferenceClickListener() {
}
if (BuildConfig.DEBUG) {
- Preference pLog = findPreference("log");
+ Preference pLog = findPreference("log");
if (pLog != null ){
pLog.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
intent.putExtra(Intent.EXTRA_TEXT, recommendText);
startActivity(intent);
- return(true);
+ return true;
}
});
pFeedback.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- String feedbackMail =(String) getText(R.string.mail_feedback);
- String feedback =(String) getText(R.string.prefs_feedback) + " - android v" + appVersion;
- Intent intent = new Intent(Intent.ACTION_SENDTO);
+ String feedbackMail = (String) getText(R.string.mail_feedback);
+ String feedback = String.format("%s - android v%s", getText(R.string.prefs_feedback), appVersion);
+ Intent intent = new Intent(Intent.ACTION_SENDTO);
+
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, feedback);
}
}
- mPrefInstantUploadPath = findPreference("instant_upload_path");
+ mPrefStoragePath = (PreferenceWithLongSummary)findPreference("storage_path");
+ if (mPrefStoragePath != null) {
+
+ mPrefStoragePath.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = new Intent(Preferences.this, LocalDirectorySelectorActivity.class);
+ intent.putExtra(UploadFilesActivity.KEY_DIRECTORY_PATH, mStoragePath);
+ startActivityForResult(intent, ACTION_SELECT_STORAGE_PATH);
+ return true;
+ }
+ });
+
+ mPrefStoragePath.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ MainApp.setStoragePath((String) newValue);
+ return true;
+ }
+ });
+ }
+
+ mPrefInstantUploadPath = (PreferenceWithLongSummary)findPreference("instant_upload_path");
if (mPrefInstantUploadPath != null){
mPrefInstantUploadPath.setOnPreferenceClickListener(new OnPreferenceClickListener() {
mPrefInstantUploadCategory =
(PreferenceCategory) findPreference("instant_uploading_category");
- mPrefInstantUploadPathWiFi = findPreference("instant_upload_on_wifi");
+ mPrefInstantUploadPathWiFi = findPreference("instant_upload_on_wifi");
mPrefInstantUpload = findPreference("instant_uploading");
toggleInstantPictureOptions(((CheckBoxPreference) mPrefInstantUpload).isChecked());
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
toggleInstantPictureOptions((Boolean) newValue);
+ toggleInstantUploadBehaviour(
+ ((CheckBoxPreference)mPrefInstantVideoUpload).isChecked(),
+ (Boolean) newValue);
return true;
}
});
toggleInstantVideoOptions(((CheckBoxPreference) mPrefInstantVideoUpload).isChecked());
mPrefInstantVideoUpload.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-
+
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
toggleInstantVideoOptions((Boolean) newValue);
+ toggleInstantUploadBehaviour(
+ (Boolean) newValue,
+ ((CheckBoxPreference) mPrefInstantUpload).isChecked());
return true;
}
});
-
+
+ mPrefInstantUploadBehaviour = findPreference("prefs_instant_behaviour");
+ toggleInstantUploadBehaviour(
+ ((CheckBoxPreference)mPrefInstantVideoUpload).isChecked(),
+ ((CheckBoxPreference)mPrefInstantUpload).isChecked());
+
/* About App */
- pAboutApp = (Preference) findPreference("about_app");
+ pAboutApp = findPreference("about_app");
if (pAboutApp != null) {
- pAboutApp.setTitle(String.format(getString(R.string.about_android), getString(R.string.app_name)));
- pAboutApp.setSummary(String.format(getString(R.string.about_version), appVersion));
+ pAboutApp.setTitle(String.format(getString(R.string.about_android),
+ getString(R.string.app_name)));
+ try {
+ Integer currentVersion = getPackageManager().getPackageInfo
+ (getPackageName(), 0).versionCode;
+ pAboutApp.setSummary(String.format(getString(R.string.about_version),
+ currentVersion));
+ } catch (NameNotFoundException e) {
+ }
}
loadInstantUploadPath();
+ loadStoragePath();
loadInstantUploadVideoPath();
/* ComponentsGetter */
Context.BIND_AUTO_CREATE);
}
+ /* Link to Beta apks */
+ Preference pBetaLink = findPreference("beta_link");
+ if (pBetaLink != null ){
+ pBetaLink.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Integer latestVersion = -1;
+ Integer currentVersion = -1;
+ try {
+ currentVersion = getPackageManager().getPackageInfo
+ (getPackageName(), 0).versionCode;
+ LoadingVersionNumberTask loadTask = new LoadingVersionNumberTask();
+ loadTask.execute();
+ latestVersion = loadTask.get();
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ if (latestVersion == -1 || currentVersion == -1) {
+ Toast.makeText(getApplicationContext(), "No information available!",
+ Toast.LENGTH_SHORT).show();
+ }
+ if (latestVersion > currentVersion) {
+ String betaLinkWeb = (String) getText(R.string.beta_link) +
+ latestVersion + ".apk";
+ if (betaLinkWeb != null && betaLinkWeb.length() > 0) {
+ Uri uriUrl = Uri.parse(betaLinkWeb);
+ Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
+ startActivity(intent);
+ return true;
+ }
+ } else {
+ Toast.makeText(getApplicationContext(), "No new version available!",
+ Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ return true;
+ }
+ });
+ }
+
+ /* Link to Beta apks */
+ Preference pChangelogLink = findPreference("changelog_link");
+ if (pChangelogLink != null) {
+ pChangelogLink.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ String betaLinkWeb = getString(R.string.changelog);
+ if (betaLinkWeb != null && betaLinkWeb.length() > 0) {
+ Uri uriUrl = Uri.parse(betaLinkWeb);
+ Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
+ startActivity(intent);
+ return true;
+ }
+ return true;
+ }
+ });
+ }
}
private void toggleInstantPictureOptions(Boolean value){
mPrefInstantUploadCategory.addPreference(mPrefInstantUploadPathWiFi);
mPrefInstantUploadCategory.addPreference(mPrefInstantUploadPath);
} else {
- mPrefInstantUploadCategory.removePreference(mPrefInstantUploadPathWiFi);
- mPrefInstantUploadCategory.removePreference(mPrefInstantUploadPath);
+// mPrefInstantUploadCategory.removePreference(mPrefInstantUploadPathWiFi);
+// mPrefInstantUploadCategory.removePreference(mPrefInstantUploadPath);
}
}
mPrefInstantUploadCategory.addPreference(mPrefInstantVideoUploadPathWiFi);
mPrefInstantUploadCategory.addPreference(mPrefInstantVideoUploadPath);
} else {
- mPrefInstantUploadCategory.removePreference(mPrefInstantVideoUploadPathWiFi);
- mPrefInstantUploadCategory.removePreference(mPrefInstantVideoUploadPath);
+// mPrefInstantUploadCategory.removePreference(mPrefInstantVideoUploadPathWiFi);
+// mPrefInstantUploadCategory.removePreference(mPrefInstantVideoUploadPath);
+ }
+ }
+
+ private void toggleInstantUploadBehaviour(Boolean video, Boolean picture){
+ if (picture || video){
+ mPrefInstantUploadCategory.addPreference(mPrefInstantUploadBehaviour);
+ } else {
+ mPrefInstantUploadCategory.removePreference(mPrefInstantUploadBehaviour);
}
}
super.onCreateContextMenu(menu, v, menuInfo);
}
- /**
- * Called when the user clicked on an item into the context menu created at
- * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} for
- * every ownCloud {@link Account} , containing 'secondary actions' for them.
- *
- * {@inheritDoc}
- */
- @Override
- public boolean onContextItemSelected(android.view.MenuItem item) {
- AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
- Account accounts[] = am.getAccountsByType(MainApp.getAccountType());
- for (Account a : accounts) {
- if (a.name.equals(mAccountName)) {
- if (item.getItemId() == R.id.change_password) {
-
- // Change account password
- Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, a);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION,
- AuthenticatorActivity.ACTION_UPDATE_TOKEN);
- startActivity(updateAccountCredentials);
-
- } else if (item.getItemId() == R.id.delete_account) {
-
- // Remove account
- am.removeAccount(a, this, mHandler);
- Log_OC.d(TAG, "Remove an account " + a.name);
- }
- }
- }
-
- return true;
- }
-
@Override
public void run(AccountManagerFuture<Boolean> future) {
if (future.isDone()) {
if (requestCode == ACTION_SELECT_UPLOAD_PATH && resultCode == RESULT_OK){
- OCFile folderToUpload =
- (OCFile) data.getParcelableExtra(UploadPathActivity.EXTRA_FOLDER);
+ OCFile folderToUpload = data.getParcelableExtra(UploadPathActivity.EXTRA_FOLDER);
mUploadPath = folderToUpload.getRemotePath();
saveInstantUploadPathOnPreferences();
- } else if (requestCode == ACTION_SELECT_UPLOAD_VIDEO_PATH && resultCode == RESULT_OK){
+ } else if (requestCode == ACTION_SELECT_UPLOAD_VIDEO_PATH && resultCode == RESULT_OK) {
- OCFile folderToUploadVideo =
- (OCFile) data.getParcelableExtra(UploadPathActivity.EXTRA_FOLDER);
+ OCFile folderToUploadVideo = data.getParcelableExtra(UploadPathActivity.EXTRA_FOLDER);
mUploadVideoPath = folderToUploadVideo.getRemotePath();
mPrefInstantVideoUploadPath.setSummary(mUploadVideoPath);
saveInstantUploadVideoPathOnPreferences();
+ } else if (requestCode == ACTION_SELECT_STORAGE_PATH && resultCode == RESULT_OK) {
+ File currentStorageDir = new File(mStoragePath);
+ File upcomingStorageDir = new File(data.getStringExtra(UploadFilesActivity.EXTRA_CHOSEN_FILES));
+
+ if (currentStorageDir != upcomingStorageDir) {
+ Intent migrationIntent = new Intent(this, StorageMigrationActivity.class);
+ migrationIntent.putExtra(StorageMigrationActivity.KEY_MIGRATION_SOURCE_DIR,
+ currentStorageDir.getAbsolutePath());
+ migrationIntent.putExtra(StorageMigrationActivity.KEY_MIGRATION_TARGET_DIR,
+ upcomingStorageDir.getAbsolutePath());
+ startActivityForResult(migrationIntent, ACTION_PERFORM_MIGRATION);
+ }
+ } else if (requestCode == ACTION_PERFORM_MIGRATION && resultCode == RESULT_OK) {
+ String resultStorageDir = data.getStringExtra(StorageMigrationActivity.KEY_MIGRATION_TARGET_DIR);
+ saveStoragePath(resultStorageDir);
+ } else if (requestCode == ACTION_REQUEST_PASSCODE && resultCode == RESULT_OK) {
+ String passcode = data.getStringExtra(PassCodeActivity.KEY_PASSCODE);
+ if (passcode != null && passcode.length() == 4) {
+ SharedPreferences.Editor appPrefs = PreferenceManager
+ .getDefaultSharedPreferences(getApplicationContext()).edit();
+
+ for (int i = 1; i <= 4; ++i) {
+ appPrefs.putString("PrefPinCode" + i, passcode.substring(i-1, i));
+ }
+ appPrefs.putBoolean("set_pincode", true);
+ appPrefs.commit();
+ Toast.makeText(this, R.string.pass_code_stored, Toast.LENGTH_LONG).show();
+ }
+ } else if (requestCode == ACTION_CONFIRM_PASSCODE && resultCode == RESULT_OK) {
+ if (data.getBooleanExtra(PassCodeActivity.KEY_CHECK_RESULT, false)) {
+
+ SharedPreferences.Editor appPrefs = PreferenceManager
+ .getDefaultSharedPreferences(getApplicationContext()).edit();
+ appPrefs.putBoolean("set_pincode", false);
+ appPrefs.commit();
+
+ Toast.makeText(this, R.string.pass_code_removed, Toast.LENGTH_LONG).show();
+ }
}
}
+ public ActionBar getSupportActionBar() {
+ return getDelegate().getSupportActionBar();
+ }
+
+ public void setSupportActionBar(@Nullable Toolbar toolbar) {
+ getDelegate().setSupportActionBar(toolbar);
+ }
+
+ @Override
+ public MenuInflater getMenuInflater() {
+ return getDelegate().getMenuInflater();
+ }
+
+ @Override
+ public void setContentView(@LayoutRes int layoutResID) {
+ getDelegate().setContentView(layoutResID);
+ }
+ @Override
+ public void setContentView(View view) {
+ getDelegate().setContentView(view);
+ }
+
+ @Override
+ public void setContentView(View view, ViewGroup.LayoutParams params) {
+ getDelegate().setContentView(view, params);
+ }
+
+ @Override
+ public void addContentView(View view, ViewGroup.LayoutParams params) {
+ getDelegate().addContentView(view, params);
+ }
+
+ @Override
+ protected void onPostResume() {
+ super.onPostResume();
+ getDelegate().onPostResume();
+ }
+
+ @Override
+ protected void onTitleChanged(CharSequence title, int color) {
+ super.onTitleChanged(title, color);
+ getDelegate().setTitle(title);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ getDelegate().onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ getDelegate().onPostCreate(savedInstanceState);
+ }
+
@Override
protected void onDestroy() {
mDbHandler.close();
}
super.onDestroy();
+ getDelegate().onDestroy();
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ getDelegate().onStop();
+ }
+
+ public void invalidateOptionsMenu() {
+ getDelegate().invalidateOptionsMenu();
+ }
+
+ private AppCompatDelegate getDelegate() {
+ if (mDelegate == null) {
+ mDelegate = AppCompatDelegate.create(this, null);
+ }
+ return mDelegate;
}
/**
}
/**
+ * Save storage path
+ */
+ private void saveStoragePath(String newStoragePath) {
+ SharedPreferences appPrefs =
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ mStoragePath = newStoragePath;
+ MainApp.setStoragePath(mStoragePath);
+ SharedPreferences.Editor editor = appPrefs.edit();
+ editor.putString("storage_path", mStoragePath);
+ editor.commit();
+ mPrefStoragePath.setSummary(mStoragePath);
+ }
+
+ /**
+ * Load storage path set on preferences
+ */
+ private void loadStoragePath() {
+ SharedPreferences appPrefs =
+ PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ mStoragePath = appPrefs.getString("storage_path", Environment.getExternalStorageDirectory()
+ .getAbsolutePath());
+ mPrefStoragePath.setSummary(mStoragePath);
+ }
+
+ /**
* Save the "Instant Upload Path" on preferences
*/
private void saveInstantUploadPathOnPreferences() {
* Load upload video path set on preferences
*/
private void loadInstantUploadVideoPath() {
- SharedPreferences appPrefs =
- PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
- mUploadVideoPath = appPrefs.getString("instant_video_upload_path", getString(R.string.instant_upload_path));
- mPrefInstantVideoUploadPath.setSummary(mUploadVideoPath);
+ mPrefInstantVideoUploadPath.setSummary(MainApp.getStoragePath());
}
/**
editor.commit();
}
- // Methods for ComponetsGetter
+ // Methods for ComponentsGetter
@Override
public FileDownloader.FileDownloaderBinder getFileDownloaderBinder() {
return mDownloaderBinder;
if (component.equals(new ComponentName(Preferences.this, FileDownloader.class))) {
mDownloaderBinder = (FileDownloader.FileDownloaderBinder) service;
-
} else if (component.equals(new ComponentName(Preferences.this, FileUploader.class))) {
Log_OC.d(TAG, "Upload service connected");
mUploaderBinder = (FileUploader.FileUploaderBinder) service;
- } else {
- return;
}
-
}
@Override
}
}
};
+
+ /**
+ *
+ * Class for loading the version number
+ *
+ */
+ private class LoadingVersionNumberTask extends AsyncTask<Void, Void, Integer> {
+ protected Integer doInBackground(Void... args) {
+ try {
+ URL url = new URL("https://github.com/owncloud/android/raw/beta/apks/latest");
+ BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
+
+ Integer latestVersion = Integer.parseInt(in.readLine());
+ in.close();
+
+ return latestVersion;
+
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return -1;
+ }
+ }
}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.activity;
+
+import android.app.SearchManager;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.operations.CreateShareViaLinkOperation;
+import com.owncloud.android.operations.GetSharesForFileOperation;
+import com.owncloud.android.providers.UsersAndGroupsSearchProvider;
+
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.ui.dialog.ShareLinkToDialog;
+import com.owncloud.android.ui.fragment.SearchShareesFragment;
+import com.owncloud.android.ui.fragment.ShareFileFragment;
+import com.owncloud.android.utils.GetShareWithUsersAsyncTask;
+
+import org.apache.http.protocol.HTTP;
+
+
+/**
+ * Activity for sharing files
+ */
+
+public class ShareActivity extends FileActivity
+ implements ShareFileFragment.OnShareFragmentInteractionListener,
+ SearchShareesFragment.OnSearchFragmentInteractionListener {
+
+ private static final String TAG = ShareActivity.class.getSimpleName();
+
+ private static final String TAG_SHARE_FRAGMENT = "SHARE_FRAGMENT";
+ private static final String TAG_SEARCH_FRAGMENT = "SEARCH_USER_AND_GROUPS_FRAGMENT";
+
+ /** Tag for dialog */
+ private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.share_activity);
+
+ FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+
+ if (savedInstanceState == null) {
+ // Add Share fragment on first creation
+ Fragment fragment = ShareFileFragment.newInstance(getFile(), getAccount());
+ ft.replace(R.id.share_fragment_container, fragment, TAG_SHARE_FRAGMENT);
+ ft.commit();
+ }
+
+ }
+
+ protected void onAccountSet(boolean stateWasRecovered) {
+ super.onAccountSet(stateWasRecovered);
+
+ // Load data into the list
+ Log_OC.d(TAG, "Refreshing lists on account set");
+ refreshSharesFromStorageManager();
+
+ // Request for a refresh of the data through the server (starts an Async Task)
+ refreshUsersOrGroupsListFromServer();
+ }
+
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ // Verify the action and get the query
+ if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
+ String query = intent.getStringExtra(SearchManager.QUERY);
+ Log_OC.w(TAG, "Ignored Intent requesting to query for " + query);
+
+ } else if (UsersAndGroupsSearchProvider.ACTION_SHARE_WITH.equals(intent.getAction())) {
+ Uri data = intent.getData();
+ doShareWith(
+ data.getLastPathSegment(),
+ UsersAndGroupsSearchProvider.DATA_GROUP.equals(data.getAuthority())
+ );
+
+ } else {
+ Log_OC.wtf(TAG, "Unexpected intent " + intent.toString());
+ }
+ }
+
+ private void doShareWith(String shareeName, boolean isGroup) {
+ getFileOperationsHelper().shareFileWithSharee(
+ getFile(),
+ shareeName,
+ (isGroup ? ShareType.GROUP : ShareType.USER)
+ );
+ }
+
+ @Override
+ public void showSearchUsersAndGroups() {
+ // replace ShareFragment with SearchFragment on demand
+ FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+ Fragment searchFragment = SearchShareesFragment.newInstance(getFile(), getAccount());
+ ft.replace(R.id.share_fragment_container, searchFragment, TAG_SEARCH_FRAGMENT);
+ ft.addToBackStack(null); // BACK button will recover the ShareFragment
+ ft.commit();
+ }
+
+ @Override
+ // Call to Unshare operation
+ public void unshareWith(OCShare share) {
+ OCFile file = getFile();
+ getFileOperationsHelper().unshareFileWithUserOrGroup(file, share.getShareType(), share.getShareWith());
+ }
+
+ /**
+ * Get users and groups from the server to fill in the "share with" list
+ */
+ @Override
+ public void refreshUsersOrGroupsListFromServer() {
+ // Show loading
+ showLoadingDialog(getString(R.string.common_loading));
+ // Get Users and Groups
+ GetShareWithUsersAsyncTask getTask = new GetShareWithUsersAsyncTask(this);
+ Object[] params = {getFile(), getAccount(), getStorageManager()};
+ getTask.execute(params);
+ }
+
+ /**
+ * Updates the view associated to the activity after the finish of some operation over files
+ * in the current account.
+ *
+ * @param operation Removal operation performed.
+ * @param result Result of the removal.
+ */
+ @Override
+ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+ super.onRemoteOperationFinish(operation, result);
+
+ if (result.isSuccess() ||
+ (operation instanceof GetSharesForFileOperation &&
+ result.getCode() == RemoteOperationResult.ResultCode.SHARE_NOT_FOUND
+ )
+ ) {
+ Log_OC.d(TAG, "Refreshing view on successful operation or finished refresh");
+ refreshSharesFromStorageManager();
+ }
+
+ if (operation instanceof CreateShareViaLinkOperation) {
+ // Send link to the app
+ String link = ((OCShare) (result.getData().get(0))).getShareLink();
+ Log_OC.d(TAG, "Share link = " + link);
+
+ Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
+ intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
+ intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE);
+ String[] packagesToExclude = new String[]{getPackageName()};
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intentToShareLink, packagesToExclude);
+ chooserDialog.show(getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+ }
+
+ }
+
+
+ /**
+ * Updates the view, reading data from {@link com.owncloud.android.datamodel.FileDataStorageManager}
+ */
+ private void refreshSharesFromStorageManager() {
+
+ ShareFileFragment shareFileFragment = getShareFileFragment();
+ if (shareFileFragment != null
+ && shareFileFragment.isAdded()) { // only if added to the view hierarchy!!
+ shareFileFragment.refreshCapabilitiesFromDB();
+ shareFileFragment.refreshUsersOrGroupsListFromDB();
+ shareFileFragment.refreshPublicShareFromDB();
+ }
+
+ SearchShareesFragment searchShareesFragment = getSearchFragment();
+ if (searchShareesFragment != null &&
+ searchShareesFragment.isAdded()) { // only if added to the view hierarchy!!
+ searchShareesFragment.refreshUsersOrGroupsListFromDB();
+ }
+ }
+
+ /**
+ * Shortcut to get access to the {@link ShareFileFragment} instance, if any
+ *
+ * @return A {@link ShareFileFragment} instance, or null
+ */
+ private ShareFileFragment getShareFileFragment() {
+ return (ShareFileFragment) getSupportFragmentManager().findFragmentByTag(TAG_SHARE_FRAGMENT);
+ }
+
+ /**
+ * Shortcut to get access to the {@link SearchShareesFragment} instance, if any
+ *
+ * @return A {@link SearchShareesFragment} instance, or null
+ */
+ private SearchShareesFragment getSearchFragment() {
+ return (SearchShareesFragment) getSupportFragmentManager().findFragmentByTag(TAG_SEARCH_FRAGMENT);
+ }
+
+}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author Bartosz Przybylski
+ * Copyright (C) 2015 ownCloud Inc.
+ * Copyright (C) 2015 Bartosz Przybylski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+package com.owncloud.android.ui.activity;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.utils.FileStorageUtils;
+
+import java.io.File;
+
+/**
+ * Created by Bartosz Przybylski on 07.11.2015.
+ */
+public class StorageMigrationActivity extends AppCompatActivity {
+ private static final String TAG = StorageMigrationActivity.class.getName();
+ public static final String KEY_MIGRATION_TARGET_DIR = "MIGRATION_TARGET";
+ public static final String KEY_MIGRATION_SOURCE_DIR = "MIGRATION_SOURCE";
+
+ private ProgressBar mProgressBar;
+ private Button mFinishButton;
+ private TextView mFeedbackText;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.migration_layout);
+ mProgressBar = (ProgressBar)findViewById(R.id.migrationProgress);
+ mFinishButton = (Button)findViewById(R.id.finishButton);
+ mFeedbackText = (TextView)findViewById(R.id.migrationText);
+
+ mProgressBar.setProgress(0);
+ mFinishButton.setVisibility(View.INVISIBLE);
+ mFeedbackText.setText(R.string.file_migration_preparing);
+
+ mFinishButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ setResult(RESULT_CANCELED);
+ finish();
+ }
+ });
+
+ String source = getIntent().getStringExtra(KEY_MIGRATION_SOURCE_DIR);
+ String destination = getIntent().getStringExtra(KEY_MIGRATION_TARGET_DIR);
+
+ if (source == null || destination == null) {
+ Log_OC.e(TAG, "source or destination is null");
+ finish();
+ }
+
+ new FileMigrationTask().execute(source, destination);
+ }
+
+ private class FileMigrationTask extends AsyncTask<String, Integer, Integer> {
+
+ private String mStorageTarget;
+ private String mStorageSource;
+ private int mProgress;
+
+ private static final int mProgressCopyUpperBound = 98;
+
+ private class MigrationException extends Exception {
+ private int mResId;
+ /*
+ * @param resId resource identifier to use for displaying error
+ */
+ MigrationException(int resId) {
+ super();
+ this.mResId = resId;
+ }
+
+ int getResId() { return mResId; }
+ }
+
+ @Override
+ protected Integer doInBackground(String... args) {
+
+ mStorageSource = args[0];
+ mStorageTarget = args[1];
+ mProgress = 0;
+
+ publishProgress(mProgress++, R.string.file_migration_preparing);
+
+ Context context = StorageMigrationActivity.this;
+ String ocAuthority = context.getString(R.string.authority);
+
+ Account[] ocAccounts = AccountManager.get(context).getAccountsByType(MainApp.getAccountType());
+ boolean[] oldAutoSync = new boolean[ocAccounts.length];
+
+ Log_OC.stopLogging();
+
+ try {
+ publishProgress(mProgress++, R.string.file_migration_checking_destination);
+
+ checkDestinationAvailability();
+
+ publishProgress(mProgress++, R.string.file_migration_saving_accounts_configuration);
+ saveAccountsSyncStatus(ocAuthority, ocAccounts, oldAutoSync);
+
+ publishProgress(mProgress++, R.string.file_migration_waiting_for_unfinished_sync);
+ stopAccountsSyncing(ocAuthority, ocAccounts);
+ waitForUnfinishedSynchronizations(ocAuthority, ocAccounts);
+
+ publishProgress(mProgress++, R.string.file_migration_migrating);
+ copyFiles();
+
+ publishProgress(mProgress++, R.string.file_migration_updating_index);
+ updateIndex(context);
+
+ publishProgress(mProgress++, R.string.file_migration_cleaning);
+ cleanup();
+
+ } catch (MigrationException e) {
+ rollback();
+ Log_OC.startLogging(mStorageSource);
+ return e.getResId();
+ } finally {
+ publishProgress(mProgress++, R.string.file_migration_restoring_accounts_configuration);
+ restoreAccountsSyncStatus(ocAuthority, ocAccounts, oldAutoSync);
+ }
+
+ Log_OC.startLogging(mStorageTarget);
+ publishProgress(mProgress++, R.string.file_migration_ok_finished);
+
+ return 0;
+ }
+
+ @Override
+ protected void onProgressUpdate(Integer... progress) {
+ mProgressBar.setProgress(progress[0]);
+ if (progress.length > 1)
+ mFeedbackText.setText(progress[1]);
+ }
+
+ @Override
+ protected void onPostExecute(Integer code) {
+ mFinishButton.setVisibility(View.VISIBLE);
+ if (code != 0) {
+ mFeedbackText.setText(code);
+ } else {
+ mFeedbackText.setText(R.string.file_migration_ok_finished);
+ mFinishButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(KEY_MIGRATION_TARGET_DIR, mStorageTarget);
+ setResult(RESULT_OK, resultIntent);
+ finish();
+ }
+ });
+ }
+ }
+
+ void checkDestinationAvailability() throws MigrationException {
+ File srcFile = new File(mStorageSource);
+ File dstFile = new File(mStorageTarget);
+
+ if (!dstFile.canRead() || !srcFile.canRead())
+ throw new MigrationException(R.string.file_migration_failed_not_readable);
+
+ if (!dstFile.canWrite() || !srcFile.canWrite())
+ throw new MigrationException(R.string.file_migration_failed_not_writable);
+
+ if (new File(dstFile, MainApp.getDataFolder()).exists())
+ throw new MigrationException(R.string.file_migration_failed_dir_already_exists);
+
+ if (dstFile.getFreeSpace() < FileStorageUtils.getFolderSize(new File(srcFile, MainApp.getDataFolder())))
+ throw new MigrationException(R.string.file_migration_failed_not_enough_space);
+ }
+
+ void copyFiles() throws MigrationException {
+ File srcFile = new File(mStorageSource + File.separator + MainApp.getDataFolder());
+ File dstFile = new File(mStorageTarget + File.separator + MainApp.getDataFolder());
+
+ copyDirs(srcFile, dstFile);
+ mProgress = Math.max(mProgress, mProgressCopyUpperBound);
+ publishProgress(mProgress);
+ }
+
+ void copyDirs(File src, File dst) throws MigrationException {
+ if (!dst.mkdirs())
+ throw new MigrationException(R.string.file_migration_failed_while_coping);
+
+ for (File f : src.listFiles()) {
+
+ mProgress = Math.min(mProgress+1, mProgressCopyUpperBound);
+ publishProgress(mProgress);
+
+ if (f.isDirectory())
+ copyDirs(f, new File(dst, f.getName()));
+ else if (!FileStorageUtils.copyFile(f, new File(dst, f.getName())))
+ throw new MigrationException(R.string.file_migration_failed_while_coping);
+ }
+
+ }
+
+ void updateIndex(Context context) throws MigrationException {
+ FileDataStorageManager manager = new FileDataStorageManager(null, context.getContentResolver());
+
+ try {
+ manager.migrateStoredFiles(mStorageSource, mStorageTarget);
+ } catch (Exception e) {
+ throw new MigrationException(R.string.file_migration_failed_while_updating_index);
+ }
+ }
+
+ void cleanup() {
+ File srcFile = new File(mStorageSource + File.separator + MainApp.getDataFolder());
+ if (!deleteRecursive(srcFile))
+ Log_OC.w(TAG, "Migration cleanup step failed");
+ }
+
+ boolean deleteRecursive(File f) {
+ boolean res = true;
+ if (f.isDirectory())
+ for (File c : f.listFiles())
+ res = deleteRecursive(c) && res;
+ return f.delete() && res;
+ }
+
+
+ void rollback() {
+ File dstFile = new File(mStorageTarget + File.separator + MainApp.getDataFolder());
+ if (dstFile.exists())
+ if (!dstFile.delete())
+ Log_OC.w(TAG, "Rollback step failed");
+ }
+
+ void saveAccountsSyncStatus(String authority, Account accounts[], boolean syncs[]) {
+ for (int i = 0; i < accounts.length; ++i)
+ syncs[i] = ContentResolver.getSyncAutomatically(accounts[i], authority);
+ }
+
+ void stopAccountsSyncing(String authority, Account accounts[]) {
+ for (int i = 0; i < accounts.length; ++i)
+ ContentResolver.setSyncAutomatically(accounts[i], authority, false);
+ }
+
+ void waitForUnfinishedSynchronizations(String authority, Account accounts[]) {
+ for (int i = 0; i < accounts.length; ++i)
+ while (ContentResolver.isSyncActive(accounts[i], authority))
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ Log_OC.w(TAG, "Thread interrupted while waiting for account to end syncing");
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ void restoreAccountsSyncStatus(String authority, Account accounts[], boolean oldSync[]) {
+ for (int i = 0; i < accounts.length; ++i)
+ ContentResolver.setSyncAutomatically(accounts[i], authority, oldSync[i]);
+ }
+
+ }
+}
package com.owncloud.android.ui.activity;
-import java.io.File;
-
import android.accounts.Account;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
+import android.preference.PreferenceManager;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBar;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.RadioButton;
import android.widget.TextView;
import com.owncloud.android.R;
+import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
-import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
+import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
import com.owncloud.android.ui.fragment.LocalFileListFragment;
-import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.FileStorageUtils;
+import java.io.File;
+
/**
* Displays local files and let the user choose what of them wants to upload
private ArrayAdapter<String> mDirectories;
private File mCurrentDir = null;
- private LocalFileListFragment mFileListFragment;
- private Button mCancelBtn;
- private Button mUploadBtn;
- private Account mAccountOnCreation;
- private DialogFragment mCurrentDialog;
+ protected LocalFileListFragment mFileListFragment;
+ protected Button mCancelBtn;
+ protected Button mUploadBtn;
+ protected Account mAccountOnCreation;
+ protected DialogFragment mCurrentDialog;
public static final String EXTRA_CHOSEN_FILES =
UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CHOSEN_FILES";
public static final int RESULT_OK_AND_MOVE = RESULT_FIRST_USER;
- private static final String KEY_DIRECTORY_PATH =
+ public static final String KEY_DIRECTORY_PATH =
UploadFilesActivity.class.getCanonicalName() + ".KEY_DIRECTORY_PATH";
private static final String TAG = "UploadFilesActivity";
private static final String WAIT_DIALOG_TAG = "WAIT";
private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE";
-
-
+ protected RadioButton mRadioBtnCopyFiles;
+ protected RadioButton mRadioBtnMoveFiles;
+
+
@Override
public void onCreate(Bundle savedInstanceState) {
Log_OC.d(TAG, "onCreate() start");
super.onCreate(savedInstanceState);
if(savedInstanceState != null) {
- mCurrentDir = new File(savedInstanceState.getString(
- UploadFilesActivity.KEY_DIRECTORY_PATH));
+ mCurrentDir = new File(savedInstanceState.getString(KEY_DIRECTORY_PATH));
+ } else if (getIntent() != null && getIntent().hasExtra(KEY_DIRECTORY_PATH)) {
+ mCurrentDir = new File(getIntent().getStringExtra(KEY_DIRECTORY_PATH));
} else {
mCurrentDir = Environment.getExternalStorageDirectory();
}
mCancelBtn.setOnClickListener(this);
mUploadBtn = (Button) findViewById(R.id.upload_files_btn_upload);
mUploadBtn.setOnClickListener(this);
+
+ SharedPreferences appPreferences = PreferenceManager
+ .getDefaultSharedPreferences(getApplicationContext());
+
+ Integer localBehaviour = appPreferences.getInt("prefs_uploader_behaviour", FileUploader.LOCAL_BEHAVIOUR_COPY);
+
+ mRadioBtnMoveFiles = (RadioButton) findViewById(R.id.upload_radio_move);
+ if (localBehaviour == FileUploader.LOCAL_BEHAVIOUR_MOVE){
+ mRadioBtnMoveFiles.setChecked(true);
+ }
+
+ mRadioBtnCopyFiles = (RadioButton) findViewById(R.id.upload_radio_copy);
+ if (localBehaviour == FileUploader.LOCAL_BEHAVIOUR_COPY){
+ mRadioBtnCopyFiles.setChecked(true);
+ }
// Action bar setup
ActionBar actionBar = getSupportActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
actionBar.setHomeButtonEnabled(true); // mandatory since Android ICS, according to the
// official documentation
actionBar.setDisplayHomeAsUpEnabled(mCurrentDir != null && mCurrentDir.getName() != null);
Log_OC.d(TAG, "onCreate() end");
}
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.uploader_menu, menu);
+ return true;
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
}
break;
}
+ case R.id.action_sort: {
+ SharedPreferences appPreferences = PreferenceManager
+ .getDefaultSharedPreferences(this);
+
+ // Read sorting order, default to sort by name ascending
+ Integer sortOrder = appPreferences
+ .getInt("sortOrder", FileStorageUtils.SORT_NAME);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.actionbar_sort_title)
+ .setSingleChoiceItems(R.array.actionbar_sortby, sortOrder ,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ switch (which){
+ case 0:
+ mFileListFragment.sortByName(true);
+ break;
+ case 1:
+ mFileListFragment.sortByDate(false);
+ break;
+ }
+
+ dialog.dismiss();
+ }
+ });
+ builder.create().show();
+ break;
+ }
default:
retval = super.onOptionsItemSelected(item);
}
// return the list of selected files (success)
Intent data = new Intent();
data.putExtra(EXTRA_CHOSEN_FILES, mFileListFragment.getCheckedFilePaths());
- setResult(RESULT_OK, data);
+
+ SharedPreferences.Editor appPreferencesEditor = PreferenceManager
+ .getDefaultSharedPreferences(getApplicationContext()).edit();
+
+
+ if (mRadioBtnMoveFiles.isChecked()){
+ setResult(RESULT_OK_AND_MOVE, data);
+ appPreferencesEditor.putInt("prefs_uploader_behaviour",
+ FileUploader.LOCAL_BEHAVIOUR_MOVE);
+ } else {
+ setResult(RESULT_OK, data);
+ appPreferencesEditor.putInt("prefs_uploader_behaviour",
+ FileUploader.LOCAL_BEHAVIOUR_COPY);
+ }
+ appPreferencesEditor.apply();
finish();
-
} else {
// show a dialog to query the user if wants to move the selected files
// to the ownCloud folder instead of copying
if (!stateWasRecovered) {
OCFileListFragment listOfFolders = getListOfFilesFragment();
- // TODO Enable when "On Device" is recovered ?
- listOfFolders.listDirectory(folder/*, false*/);
+ listOfFolders.listDirectory(folder, false);
startSyncFolderOperation(folder, false);
}
import android.accounts.Account;
import android.accounts.AccountManager;
-import android.app.AlertDialog;
-import android.app.AlertDialog.Builder;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AlertDialog.Builder;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
+import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.owncloud.android.utils.CopyTmpFileAsyncTask;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.FileStorageUtils;
/**
if (mAccountSelected) {
setAccount((Account) savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT));
}
-
-
- ActionBar actionBar = getSupportActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
-
}
@Override
final AlertDialog.Builder builder = new Builder(this);
switch (id) {
case DIALOG_WAITING:
- ProgressDialog pDialog = new ProgressDialog(this);
+ final ProgressDialog pDialog = new ProgressDialog(this, R.style.ProgressDialogTheme);
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.setMessage(getResources().getString(R.string.uploader_info_uploading));
+ pDialog.setOnShowListener(new DialogInterface.OnShowListener() {
+ @Override
+ public void onShow(DialogInterface dialog) {
+ ProgressBar v = (ProgressBar) pDialog.findViewById(android.R.id.progress);
+ v.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.color_accent),
+ android.graphics.PorterDuff.Mode.MULTIPLY);
+
+ }
+ });
return pDialog;
case DIALOG_NO_ACCOUNT:
builder.setIcon(android.R.drawable.ic_dialog_alert);
// click on folder in the list
Log_OC.d(TAG, "on item click");
// TODO Enable when "On Device" is recovered ?
- Vector<OCFile> tmpfiles = getStorageManager().getFolderContent(mFile /*, false*/);
+ Vector<OCFile> tmpfiles = getStorageManager().getFolderContent(mFile , false);
+ tmpfiles = sortFileList(tmpfiles);
+
if (tmpfiles.size() <= 0) return;
// filter on dirtype
Vector<OCFile> files = new Vector<OCFile>();
break;
- case R.id.uploader_new_folder:
- CreateFolderDialogFragment dialog = CreateFolderDialogFragment.newInstance(mFile);
- dialog.show(getSupportFragmentManager(), "createdirdialog");
+ case R.id.uploader_cancel:
+ finish();
break;
setContentView(R.layout.uploader_layout);
ListView mListView = (ListView) findViewById(android.R.id.list);
+ ActionBar actionBar = getSupportActionBar();
String current_dir = mParents.peek();
if(current_dir.equals("")){
- getSupportActionBar().setTitle(getString(R.string.default_display_name_for_root_folder));
+ actionBar.setTitle(getString(R.string.uploader_top_message));
}
else{
- getSupportActionBar().setTitle(current_dir);
+ actionBar.setTitle(current_dir);
}
boolean notRoot = (mParents.size() > 1);
- ActionBar actionBar = getSupportActionBar();
+
actionBar.setDisplayHomeAsUpEnabled(notRoot);
actionBar.setHomeButtonEnabled(notRoot);
mFile = getStorageManager().getFileByPath(full_path);
if (mFile != null) {
// TODO Enable when "On Device" is recovered ?
- Vector<OCFile> files = getStorageManager().getFolderContent(mFile/*, false*/);
+ Vector<OCFile> files = getStorageManager().getFolderContent(mFile, false);
+ files = sortFileList(files);
+
List<HashMap<String, Object>> data = new LinkedList<HashMap<String,Object>>();
for (OCFile f : files) {
- HashMap<String, Object> h = new HashMap<String, Object>();
if (f.isFolder()) {
+ HashMap<String, Object> h = new HashMap<String, Object>();
h.put("dirname", f.getFileName());
+ h.put("last_mod", DisplayUtils.getRelativeTimestamp(this, f));
data.add(h);
}
}
SimpleAdapter sa = new SimpleAdapter(this,
data,
R.layout.uploader_list_item_layout,
- new String[] {"dirname"},
- new int[] {R.id.filename});
+ new String[] {"dirname", "last_mod"},
+ new int[] {R.id.filename, R.id.last_mod});
mListView.setAdapter(sa);
Button btnChooseFolder = (Button) findViewById(R.id.uploader_choose_folder);
btnChooseFolder.setOnClickListener(this);
- Button btnNewFolder = (Button) findViewById(R.id.uploader_new_folder);
+ Button btnNewFolder = (Button) findViewById(R.id.uploader_cancel);
btnNewFolder.setOnClickListener(this);
mListView.setOnItemClickListener(this);
}
}
+ private Vector<OCFile> sortFileList(Vector<OCFile> files) {
+ SharedPreferences sharedPreferences = PreferenceManager
+ .getDefaultSharedPreferences(this);
+
+ // Read sorting order, default to sort by name ascending
+ FileStorageUtils.mSortOrder = sharedPreferences.getInt("sortOrder", 0);
+ FileStorageUtils.mSortAscending = sharedPreferences.getBoolean("sortAscending", true);
+
+ files = FileStorageUtils.sortOcFolder(files);
+ return files;
+ }
+
private String generatePath(Stack<String> dirs) {
String full_path = "";
RemoteOperationResult result) {
if (result.isSuccess()) {
dismissLoadingDialog();
+ String remotePath = operation.getRemotePath().substring(0, operation.getRemotePath().length() -1);
+ String newFolder = remotePath.substring(remotePath.lastIndexOf("/") + 1);
+ mParents.push(newFolder);
populateDirectoryList();
} else {
- dismissLoadingDialog();
try {
Toast msg = Toast.makeText(this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
}
}
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.main_menu, menu);
+ menu.findItem(R.id.action_sort).setVisible(false);
+ menu.findItem(R.id.action_sync_account).setVisible(false);
+ return true;
+ }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean retval = true;
switch (item.getItemId()) {
+ case R.id.action_create_dir:
+ CreateFolderDialogFragment dialog = CreateFolderDialogFragment.newInstance(mFile);
+ dialog.show(
+ getSupportFragmentManager(),
+ CreateFolderDialogFragment.CREATE_FOLDER_FRAGMENT);
+ break;
case android.R.id.home:
if((mParents.size() > 1)) {
onBackPressed();
}
final InputStream in = snapshot.getInputStream( 0 );
if ( in != null ) {
- final BufferedInputStream buffIn =
+ final BufferedInputStream buffIn =
new BufferedInputStream( in, IO_BUFFER_SIZE );
- bitmap = BitmapFactory.decodeStream( buffIn );
- }
+ bitmap = BitmapFactory.decodeStream( buffIn );
+ }
} catch ( IOException e ) {
e.printStackTrace();
} finally {
e.printStackTrace();
}
}
+
+ public void setMaxSize(long maxSize){
+ mDiskCache.setMaxSize(maxSize);
+ }
+
+ public long getMaxSize(){
+ return mDiskCache.getMaxSize();
+ }
}
\ No newline at end of file
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * Copyright (C) 2015 Tobias Kaminsky
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ * adapted from: http://stephendnicholas.com/archives/974
+ *
+ */
+
+package com.owncloud.android.ui.adapter;
+
+import android.accounts.Account;
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.provider.OpenableColumns;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class DiskLruImageCacheFileProvider extends ContentProvider {
+ private static String TAG = FileDataStorageManager.class.getSimpleName();
+ private FileDataStorageManager mFileDataStorageManager;
+
+ public static final String AUTHORITY = "org.owncloud.beta.imageCache.provider";
+
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ private OCFile getFile(Uri uri){
+ Account account = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
+ mFileDataStorageManager = new FileDataStorageManager(account,
+ MainApp.getAppContext().getContentResolver());
+
+ OCFile ocFile = mFileDataStorageManager.getFileByPath(uri.getPath());
+ return ocFile;
+ }
+
+ @Override
+ public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+ OCFile ocFile = getFile(uri);
+
+ Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(
+ String.valueOf("r" + ocFile.getRemoteId()));
+
+ // create a file to write bitmap data
+ File f = new File(MainApp.getAppContext().getCacheDir(), ocFile.getFileName());
+ try {
+ f.createNewFile();
+
+ //Convert bitmap to byte array
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bos);
+ byte[] bitmapdata = bos.toByteArray();
+
+ //write the bytes in file
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(f);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ fos.write(bitmapdata);
+ fos.flush();
+ fos.close();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ OCFile ocFile = getFile(uri);
+ return ocFile.getMimetype();
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] arg1, String arg2, String[] arg3, String arg4) {
+ MatrixCursor cursor = null;
+
+ OCFile ocFile = getFile(uri);
+ File file = new File(MainApp.getAppContext().getCacheDir(), ocFile.getFileName());
+ if (file.exists()) {
+ cursor = new MatrixCursor(new String[] {
+ OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE });
+ cursor.addRow(new Object[] { uri.getLastPathSegment(),
+ file.length() });
+ }
+
+ return cursor;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ return null;
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ return 0;
+ }
+}
* @author Bartek Przybylski\r
* @author Tobias Kaminsky\r
* @author David A. Velasco\r
+ * @author masensio\r
* Copyright (C) 2011 Bartek Przybylski\r
* Copyright (C) 2015 ownCloud Inc.\r
*\r
\r
\r
import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
import java.util.Vector;\r
\r
import android.accounts.Account;\r
import android.content.Context;\r
import android.content.SharedPreferences;\r
import android.graphics.Bitmap;\r
+import android.graphics.Color;\r
import android.graphics.BitmapFactory;\r
import android.graphics.Canvas;\r
import android.graphics.Paint;\r
import com.owncloud.android.ui.activity.ComponentsGetter;\r
import com.owncloud.android.utils.DisplayUtils;\r
import com.owncloud.android.utils.FileStorageUtils;\r
+import com.owncloud.android.utils.MimetypeIconUtil;\r
\r
\r
/**\r
* instance.\r
*/\r
public class FileListListAdapter extends BaseAdapter implements ListAdapter {\r
- private final static String PERMISSION_SHARED_WITH_ME = "S";\r
\r
private Context mContext;\r
private OCFile mFile = null;\r
private enum ViewType {LIST_ITEM, GRID_IMAGE, GRID_ITEM };\r
\r
private SharedPreferences mAppPreferences;\r
+\r
+ private HashMap<Integer, Boolean> mSelection = new HashMap<Integer, Boolean>();\r
\r
public FileListListAdapter(\r
boolean justFolders, \r
ViewType viewType;\r
if (!mGridMode){\r
viewType = ViewType.LIST_ITEM;\r
- } else if (file.isImage()){\r
+ } else if (file.isImage() || file.isVideo()){\r
viewType = ViewType.GRID_IMAGE;\r
} else {\r
viewType = ViewType.GRID_ITEM;\r
switch (viewType){\r
case LIST_ITEM:\r
TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
+ TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);\r
TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
- ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+\r
\r
lastModV.setVisibility(View.VISIBLE);\r
- lastModV.setText(showRelativeTimestamp(file));\r
+ lastModV.setText(DisplayUtils.getRelativeTimestamp(mContext, file));\r
\r
- checkBoxV.setVisibility(View.GONE);\r
\r
+ fileSizeSeparatorV.setVisibility(View.VISIBLE);\r
fileSizeV.setVisibility(View.VISIBLE);\r
fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
\r
- if (!file.isFolder()) {\r
- AbsListView parentList = (AbsListView)parent;\r
- if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\r
- if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) {\r
- checkBoxV.setVisibility(View.GONE);\r
- } else {\r
- if (parentList.isItemChecked(position)) {\r
- checkBoxV.setImageResource(\r
- android.R.drawable.checkbox_on_background);\r
- } else {\r
- checkBoxV.setImageResource(\r
- android.R.drawable.checkbox_off_background);\r
- }\r
- checkBoxV.setVisibility(View.VISIBLE);\r
- }\r
- }\r
-\r
- } else { //Folder\r
- fileSizeV.setVisibility(View.INVISIBLE);\r
+// if (!file.isFolder()) {\r
+// AbsListView parentList = (AbsListView)parent;\r
+// if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\r
+// if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) {\r
+// checkBoxV.setVisibility(View.GONE);\r
+// } else {\r
+// if (parentList.isItemChecked(position)) {\r
+// checkBoxV.setImageResource(\r
+// R.drawable.ic_checkbox_marked);\r
+// } else {\r
+// checkBoxV.setImageResource(\r
+// R.drawable.ic_checkbox_blank_outline);\r
+// }\r
+// checkBoxV.setVisibility(View.VISIBLE);\r
+// }\r
+// }\r
+\r
+ if (file.isFolder()) {\r
+ fileSizeSeparatorV.setVisibility(View.GONE);\r
+ fileSizeV.setVisibility(View.GONE);\r
}\r
\r
case GRID_ITEM:\r
case GRID_IMAGE:\r
// sharedIcon\r
ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
- if (file.isShareByLink()) {\r
+ if (file.isSharedViaLink()) {\r
+ sharedIconV.setImageResource(R.drawable.shared_via_link);\r
+ sharedIconV.setVisibility(View.VISIBLE);\r
+ sharedIconV.bringToFront();\r
+ } else if (file.isSharedWithSharee() || file.isSharedWithMe() ) {\r
+ sharedIconV.setImageResource(R.drawable.shared_via_users);\r
sharedIconV.setVisibility(View.VISIBLE);\r
sharedIconV.bringToFront();\r
} else {\r
sharedIconV.setVisibility(View.GONE);\r
}\r
\r
+ /*ImageView sharedWithMeIcon = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+ sharedWithMeIcon.bringToFront();*/\r
+\r
// local state\r
ImageView localStateView = (ImageView) view.findViewById(R.id.localFileIndicator);\r
localStateView.bringToFront();\r
mTransferServiceGetter.getFileDownloaderBinder();\r
FileUploaderBinder uploaderBinder =\r
mTransferServiceGetter.getFileUploaderBinder();\r
- boolean downloading = (downloaderBinder != null &&\r
- downloaderBinder.isDownloading(mAccount, file));\r
OperationsServiceBinder opsBinder =\r
mTransferServiceGetter.getOperationsServiceBinder();\r
- downloading |= (opsBinder != null &&\r
- opsBinder.isSynchronizing(mAccount, file.getRemotePath()));\r
- if (downloading) {\r
- localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
+\r
+ localStateView.setVisibility(View.INVISIBLE); // default first\r
+\r
+ if ( //synchronizing\r
+ opsBinder != null &&\r
+ opsBinder.isSynchronizing(mAccount, file.getRemotePath())\r
+ ) {\r
+ localStateView.setImageResource(R.drawable.synchronizing_file_indicator);\r
localStateView.setVisibility(View.VISIBLE);\r
- } else if (uploaderBinder != null &&\r
- uploaderBinder.isUploading(mAccount, file)) {\r
- localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
+\r
+ } else if ( // downloading\r
+ downloaderBinder != null &&\r
+ downloaderBinder.isDownloading(mAccount, file)\r
+ ) {\r
+ localStateView.setImageResource(\r
+ file.isFolder() ?\r
+ R.drawable.synchronizing_file_indicator :\r
+ R.drawable.downloading_file_indicator\r
+ );\r
localStateView.setVisibility(View.VISIBLE);\r
+\r
+ } else if ( //uploading\r
+ uploaderBinder != null &&\r
+ uploaderBinder.isUploading(mAccount, file)\r
+ ) {\r
+ localStateView.setImageResource(\r
+ file.isFolder() ?\r
+ R.drawable.synchronizing_file_indicator :\r
+ R.drawable.uploading_file_indicator\r
+ );\r
+ localStateView.setVisibility(View.VISIBLE);\r
+\r
+ } else if (file.getEtagInConflict() != null) { // conflict\r
+ localStateView.setImageResource(R.drawable.conflict_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
+\r
} else if (file.isDown()) {\r
localStateView.setImageResource(R.drawable.local_file_indicator);\r
localStateView.setVisibility(View.VISIBLE);\r
- } else {\r
- localStateView.setVisibility(View.INVISIBLE);\r
}\r
\r
- // share with me icon\r
- ImageView sharedWithMeIconV = (ImageView)\r
- view.findViewById(R.id.sharedWithMeIcon);\r
- sharedWithMeIconV.bringToFront();\r
- if (checkIfFileIsSharedWithMe(file) &&\r
- (!file.isFolder() || !mGridMode)) {\r
- sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+ break;\r
+ }\r
+\r
+ ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+ checkBoxV.setVisibility(View.GONE);\r
+\r
+ AbsListView parentList = (AbsListView)parent;\r
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\r
+ if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) {\r
+ checkBoxV.setVisibility(View.GONE);\r
+ } else if (parentList.getCheckedItemCount() > 0){\r
+ if (parentList.isItemChecked(position)) {\r
+ checkBoxV.setImageResource(\r
+ android.R.drawable.checkbox_on_background);\r
} else {\r
- sharedWithMeIconV.setVisibility(View.GONE);\r
+ checkBoxV.setImageResource(\r
+ android.R.drawable.checkbox_off_background);\r
}\r
-\r
- break;\r
+ checkBoxV.setVisibility(View.VISIBLE);\r
+ }\r
}\r
\r
// For all Views\r
if ((file.isImage() || file.isVideo()) && file.getRemoteId() != null){\r
// Thumbnail in Cache?\r
Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(\r
- String.valueOf(file.getRemoteId())\r
- );\r
+ "t" + String.valueOf(file.getRemoteId()));\r
if (thumbnail != null && !file.needsUpdateThumbnail()){\r
\r
if (file.isVideo()) {\r
task\r
);\r
fileIcon.setImageDrawable(asyncDrawable);\r
- task.execute(file);\r
+ task.execute(file, true);\r
}\r
}\r
+\r
+ if (file.getMimetype().equalsIgnoreCase("image/png")) {\r
+ fileIcon.setBackgroundColor(mContext.getResources()\r
+ .getColor(R.color.background_color));\r
+ }\r
+\r
+\r
} else {\r
- fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(),\r
+ fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(file.getMimetype(),\r
file.getFileName()));\r
}\r
\r
} else {\r
// Folder\r
- if (checkIfFileIsSharedWithMe(file)) {\r
- fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
- } else if (file.isShareByLink()) {\r
- // If folder is sharedByLink, icon folder must be changed to\r
- // folder-public one\r
- fileIcon.setImageResource(R.drawable.folder_public);\r
- } else {\r
- fileIcon.setImageResource(\r
- DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName())\r
- );\r
- }\r
+ fileIcon.setImageResource(\r
+ MimetypeIconUtil.getFolderTypeIconId(\r
+ file.isSharedWithMe() || file.isSharedWithSharee(),\r
+ file.isSharedViaLink()\r
+ )\r
+ );\r
}\r
}\r
\r
- return view;\r
- }\r
-\r
- /**\r
- * Local Folder size in human readable format\r
- * \r
- * @param path\r
- * String\r
- * @return Size in human readable format\r
- */\r
- private String getFolderSizeHuman(String path) {\r
-\r
- File dir = new File(path);\r
-\r
- if (dir.exists()) {\r
- long bytes = FileStorageUtils.getFolderSize(dir);\r
- return DisplayUtils.bytesToHumanReadable(bytes);\r
+ if (mSelection.get(position) != null) {\r
+ view.setBackgroundColor(Color.rgb(248, 248, 248));\r
+ } else {\r
+ view.setBackgroundColor(Color.WHITE);\r
}\r
\r
- return "0 B";\r
+ return view;\r
}\r
\r
- /**\r
- * Local Folder size\r
- * @param dir File\r
- * @return Size in bytes\r
- */\r
- private long getFolderSize(File dir) {\r
- if (dir.exists()) {\r
- long result = 0;\r
- File[] fileList = dir.listFiles();\r
- for(int i = 0; i < fileList.length; i++) {\r
- if(fileList[i].isDirectory()) {\r
- result += getFolderSize(fileList[i]);\r
- } else {\r
- result += fileList[i].length();\r
- }\r
- }\r
- return result;\r
- }\r
- return 0;\r
- } \r
-\r
@Override\r
public int getViewTypeCount() {\r
return 1;\r
* mStorageManager if is different (and not NULL)\r
*/\r
public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager\r
- /*, boolean onlyOnDevice*/) {\r
+ , boolean onlyOnDevice) {\r
mFile = directory;\r
if (updatedStorageManager != null && updatedStorageManager != mStorageManager) {\r
mStorageManager = updatedStorageManager;\r
mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
}\r
if (mStorageManager != null) {\r
- // TODO Enable when "On Device" is recovered ?\r
- mFiles = mStorageManager.getFolderContent(mFile/*, onlyOnDevice*/);\r
+ mFiles = mStorageManager.getFolderContent(mFile, onlyOnDevice);\r
mFilesOrig.clear();\r
mFilesOrig.addAll(mFiles);\r
\r
mFiles = null;\r
}\r
\r
- mFiles = FileStorageUtils.sortFolder(mFiles);\r
+ mFiles = FileStorageUtils.sortOcFolder(mFiles);\r
notifyDataSetChanged();\r
}\r
\r
}\r
\r
\r
- /**\r
- * Check if parent folder does not include 'S' permission and if file/folder\r
- * is shared with me\r
- * \r
- * @param file: OCFile\r
- * @return boolean: True if it is shared with me and false if it is not\r
- */\r
- private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
- return (mFile.getPermissions() != null \r
- && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
- && file.getPermissions() != null \r
- && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
- }\r
-\r
public void setSortOrder(Integer order, boolean ascending) {\r
SharedPreferences.Editor editor = mAppPreferences.edit();\r
editor.putInt("sortOrder", order);\r
FileStorageUtils.mSortAscending = ascending;\r
\r
\r
- mFiles = FileStorageUtils.sortFolder(mFiles);\r
+ mFiles = FileStorageUtils.sortOcFolder(mFiles);\r
notifyDataSetChanged();\r
\r
}\r
- \r
- private CharSequence showRelativeTimestamp(OCFile file){\r
- return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),\r
- DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);\r
- }\r
\r
public void setGridMode(boolean gridMode) {\r
mGridMode = gridMode;\r
}\r
+\r
+ public boolean isGridMode() {\r
+ return mGridMode;\r
+ }\r
+\r
+ public void setNewSelection(int position, boolean checked) {\r
+ mSelection.put(position, checked);\r
+ notifyDataSetChanged();\r
+ }\r
+\r
+ public void removeSelection(int position) {\r
+ mSelection.remove(position);\r
+ notifyDataSetChanged();\r
+ }\r
+\r
+ public void removeSelection(){\r
+ mSelection.clear();\r
+ notifyDataSetChanged();\r
+ }\r
+\r
+ public ArrayList<Integer> getCheckedItemPositions() {\r
+ ArrayList<Integer> ids = new ArrayList<Integer>();\r
+\r
+ for (Map.Entry<Integer, Boolean> entry : mSelection.entrySet()){\r
+ if (entry.getValue()){\r
+ ids.add(entry.getKey());\r
+ }\r
+ }\r
+ return ids;\r
+ }\r
+\r
+ public ArrayList<OCFile> getCheckedItems() {\r
+ ArrayList<OCFile> files = new ArrayList<OCFile>();\r
+\r
+ for (Map.Entry<Integer, Boolean> entry : mSelection.entrySet()){\r
+ if (entry.getValue()){\r
+ files.add((OCFile) getItem(entry.getKey()));\r
+ }\r
+ }\r
+ return files;\r
+ }\r
}\r
import java.util.Comparator;
import android.content.Context;
+import android.content.SharedPreferences;
import android.graphics.Bitmap;
+import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.utils.BitmapUtils;
import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.MimetypeIconUtil;
+import com.owncloud.android.utils.FileStorageUtils;
/**
* This Adapter populates a ListView with all files and directories contained
* in a local directory
*/
public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
-
+
+ private static final String TAG = LocalFileListAdapter.class.getSimpleName();
+
private Context mContext;
private File mDirectory;
private File[] mFiles = null;
+ private SharedPreferences mAppPreferences;
public LocalFileListAdapter(File directory, Context context) {
mContext = context;
+
+ mAppPreferences = PreferenceManager
+ .getDefaultSharedPreferences(mContext);
+
+ // Read sorting order, default to sort by name ascending
+ FileStorageUtils.mSortOrder = mAppPreferences.getInt("sortOrder", 0);
+ FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true);
+
swapDirectory(directory);
}
fileName.setText(name);
ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);
+
+ /** Cancellation needs do be checked and done before changing the drawable in fileIcon, or
+ * {@link ThumbnailsCacheManager#cancelPotentialWork} will NEVER cancel any task.
+ **/
+ boolean allowedToCreateNewThumbnail = (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon));
+
if (!file.isDirectory()) {
fileIcon.setImageResource(R.drawable.file);
} else {
fileIcon.setTag(file.hashCode());
TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);
+ TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);
TextView lastModV = (TextView) view.findViewById(R.id.last_mod);
ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);
if (!file.isDirectory()) {
+ fileSizeSeparatorV.setVisibility(View.VISIBLE);
fileSizeV.setVisibility(View.VISIBLE);
fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
checkBoxV.setVisibility(View.GONE);
} else {
if (parentList.isItemChecked(position)) {
- checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);
+ checkBoxV.setImageResource(R.drawable.ic_checkbox_marked);
} else {
- checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);
+ checkBoxV.setImageResource(R.drawable.ic_checkbox_blank_outline);
}
checkBoxV.setVisibility(View.VISIBLE);
}
} else {
// generate new Thumbnail
- if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {
+ if (allowedToCreateNewThumbnail) {
final ThumbnailsCacheManager.ThumbnailGenerationTask task =
new ThumbnailsCacheManager.ThumbnailGenerationTask(fileIcon);
if (thumbnail == null) {
);
fileIcon.setImageDrawable(asyncDrawable);
task.execute(file);
- }
+ Log_OC.v(TAG, "Executing task to generate a new thumbnail");
+
+ } // else, already being generated, don't restart it
}
} else {
- fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(null, file.getName()));
+ fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(null, file.getName()));
}
} else {
+ fileSizeSeparatorV.setVisibility(View.GONE);
fileSizeV.setVisibility(View.GONE);
lastModV.setVisibility(View.GONE);
checkBoxV.setVisibility(View.GONE);
view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);
view.findViewById(R.id.sharedIcon).setVisibility(View.GONE);
- view.findViewById(R.id.sharedWithMeIcon).setVisibility(View.GONE);
}
return view;
public void swapDirectory(File directory) {
mDirectory = directory;
mFiles = (mDirectory != null ? mDirectory.listFiles() : null);
- if (mFiles != null) {
+ if (mFiles != null && mFiles.length > 0) {
Arrays.sort(mFiles, new Comparator<File>() {
@Override
public int compare(File lhs, File rhs) {
}
});
+
+ mFiles = FileStorageUtils.sortLocalFolder(mFiles);
}
notifyDataSetChanged();
}
+
+ public void setSortOrder(Integer order, boolean ascending) {
+ SharedPreferences.Editor editor = mAppPreferences.edit();
+ editor.putInt("sortOrder", order);
+ editor.putBoolean("sortAscending", ascending);
+ editor.commit();
+
+ FileStorageUtils.mSortOrder = order;
+ FileStorageUtils.mSortAscending = ascending;
+
+ mFiles = FileStorageUtils.sortLocalFolder(mFiles);
+ notifyDataSetChanged();
+
+ }
}
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
NavigationDrawerItem navItem = (NavigationDrawerItem) mAll.get(position);
View view = inflator.inflate(R.layout.drawer_list_item, null);
- view.setMinimumHeight(40);
+
LinearLayout itemLayout = (LinearLayout) view.findViewById(R.id.itemLayout);
itemLayout.setContentDescription(navItem.getContentDescription());
+
TextView itemText = (TextView) view.findViewById(R.id.itemTitle);
itemText.setText(navItem.getTitle());
+ if(navItem.getIcon()!=0) {
+ ImageView itemImage = (ImageView) view.findViewById(R.id.itemIcon);
+ itemImage.setImageResource(navItem.getIcon());
+ }
+
return view;
}
// TODO re-enable when "Accounts" is available in Navigation Drawer
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+
+import java.util.ArrayList;
+
+/**
+ * Adapter to show a user/group in Share With List
+ */
+public class ShareUserListAdapter extends ArrayAdapter {
+
+ private Context mContext;
+ private ArrayList<OCShare> mShares;
+ private ShareUserAdapterListener mListener;
+
+ public ShareUserListAdapter(Context context, int resource, ArrayList<OCShare>shares,
+ ShareUserAdapterListener listener) {
+ super(context, resource);
+ mContext= context;
+ mShares = shares;
+ mListener = listener;
+ }
+
+ @Override
+ public int getCount() {
+ return mShares.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mShares.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return 0;
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ LayoutInflater inflator = (LayoutInflater) mContext
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflator.inflate(R.layout.share_user_item, parent, false);
+
+ if (mShares != null && mShares.size() > position) {
+ OCShare share = mShares.get(position);
+
+ TextView userName = (TextView) view.findViewById(R.id.userOrGroupName);
+ String name = share.getSharedWithDisplayName();
+ if (share.getShareType() == ShareType.GROUP) {
+ name = getContext().getString(R.string.share_group_clarification, name);
+ }
+ userName.setText(name);
+
+ final ImageView unshareButton = (ImageView) view.findViewById(R.id.unshareButton);
+ unshareButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mListener.unshareButtonPressed(mShares.get(position));
+ }
+ });
+
+ }
+ return view;
+ }
+
+ public interface ShareUserAdapterListener {
+ void unshareButtonPressed(OCShare share);
+ }
+
+
+
+}
*/
package com.owncloud.android.ui.adapter;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.text.DateFormat;
import java.util.Date;
import com.owncloud.android.R;
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
+import android.util.Log;
import android.view.View;
import android.widget.TextView;
//private final static String TAG = X509CertificateViewAdapter.class.getSimpleName();
private X509Certificate mCertificate = null;
-
+
+ private static final String TAG = X509CertificateViewAdapter.class.getSimpleName();
+
public X509CertificateViewAdapter(X509Certificate certificate) {
mCertificate = certificate;
}
}
}
+ private byte[] getDigest(String algorithm, byte[] message) {
+ MessageDigest md = null;
+
+ try {
+ md = MessageDigest.getInstance(algorithm);
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ md.reset();
+ return md.digest(message);
+ }
+
private void showSignature(View dialogView) {
- TextView sigView = ((TextView)dialogView.findViewById(R.id.value_signature));
- TextView algorithmView = ((TextView)dialogView.findViewById(R.id.value_signature_algorithm));
- sigView.setText(getHex(mCertificate.getSignature()));
- algorithmView.setText(mCertificate.getSigAlgName());
+ byte[] cert = null;
+
+ TextView certFingerprintView = ((TextView) dialogView.findViewById(R.id.value_certificate_fingerprint));
+ TextView algorithmView = ((TextView) dialogView.findViewById(R.id.value_signature_algorithm));
+
+ try {
+ cert = mCertificate.getEncoded();
+ if (cert == null) {
+
+ certFingerprintView.setText(R.string.certificate_load_problem);
+ algorithmView.setText(R.string.certificate_load_problem);
+
+ } else {
+
+ certFingerprintView.setText(
+ getDigestHexBytesWithColonsAndNewLines(dialogView, "SHA-256", cert)
+ + getDigestHexBytesWithColonsAndNewLines(dialogView, "SHA-1", cert)
+ + getDigestHexBytesWithColonsAndNewLines(dialogView, "MD5", cert));
+ algorithmView.setText(mCertificate.getSigAlgName());
+
+ }
+
+ } catch (CertificateEncodingException e) {
+ Log.e(TAG, "Problem while trying to decode the certificate.");
+ }
+
+
}
- public String getHex(final byte [] raw) {
- if (raw == null) {
- return null;
+ private final String getDigestHexBytesWithColonsAndNewLines(View dialogView, final String digestType, final byte [] cert) {
+ final byte[] rawDigest;
+ final String newLine = System.getProperty("line.separator");
+
+ rawDigest = getDigest(digestType, cert);
+
+ if ( rawDigest == null) {
+ return digestType + ":" + newLine + dialogView.getContext().getString(R.string.digest_algorithm_not_available) + newLine + newLine;
}
- final StringBuilder hex = new StringBuilder(2 * raw.length);
- for (final byte b : raw) {
+
+ final StringBuilder hex = new StringBuilder(3 * rawDigest.length);
+
+ for (final byte b : rawDigest) {
final int hiVal = (b & 0xF0) >> 4;
final int loVal = b & 0x0F;
hex.append((char) ('0' + (hiVal + (hiVal / 10 * 7))));
hex.append((char) ('0' + (loVal + (loVal / 10 * 7))));
+ hex.append(":");
}
- return hex.toString();
+ return digestType + ":" + newLine + hex.toString().replaceFirst("\\:$","") + newLine + newLine;
}
private void showValidity(Date notBefore, Date notAfter, View dialogView) {
--- /dev/null
+package com.owncloud.android.ui.dialog;
+
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.ui.dialog.parcel.MenuItemParcelable;
+import com.owncloud.android.ui.dialog.parcel.MenuParcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog for choosing a file action.
+ */
+public class AccountActionsDialogFragment extends DialogFragment implements
+ OnItemClickListener {
+ private static final String ARG_ITEM_LIST = "ITEM_LIST";
+ private static final String ARG_FILE_POSITION = "FILE_POSITION";
+ public static final String FTAG_FILE_ACTIONS = "FILE_ACTIONS_FRAGMENT";
+
+ private List<MenuItemParcelable> mMenuItems;
+
+ private int mFilePosition;
+
+ private ListView mListView;
+
+ /**
+ * Listener interface for the file action fragment.
+ */
+ public interface FileActionsDialogFragmentListener {
+ // TODO Tobi change to int array?
+ public boolean onFileActionChosen(int menuId, int filePosition);
+ }
+
+ /**
+ * Public factory method to create new FileActionsDialogFragment instances.
+ *
+ * @param menu menu to be display.
+ * @return Dialog ready to show.
+ */
+ public static AccountActionsDialogFragment newInstance(Menu menu, int filePosition) {
+ AccountActionsDialogFragment fragment = new AccountActionsDialogFragment();
+ Bundle args = new Bundle();
+
+ MenuParcelable menuParcelable = new MenuParcelable();
+ menuParcelable.setMenuItems(calculateMenuParcel(menu));
+
+ args.putParcelable(ARG_ITEM_LIST, menuParcelable);
+ args.putInt(ARG_FILE_POSITION, filePosition);
+
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setStyle(DialogFragment.STYLE_NORMAL, R.style.ownCloud_Dialog);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.file_actions, null, false);
+ mListView = (ListView) view.findViewById(R.id.file_actions_list);
+
+ getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ return view;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ mFilePosition = getArguments().getInt(ARG_FILE_POSITION);
+
+ MenuParcelable menu = getArguments().getParcelable(ARG_ITEM_LIST);
+ mMenuItems = menu.getMenuItems();
+ List<String> stringList = new ArrayList<String>();
+ for (int i = 0; i < mMenuItems.size(); i++) {
+ stringList.add(mMenuItems.get(i).getMenuText());
+ }
+
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
+ R.layout.simple_dialog_list_item, stringList);
+
+ mListView.setAdapter(adapter);
+
+ mListView.setOnItemClickListener(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ dismiss();
+ ((FileActionsDialogFragmentListener) getTargetFragment()).onFileActionChosen(mMenuItems.get(position).getMenuItemId(), mFilePosition);
+ }
+
+ /**
+ * calculates a parcelable list of MenuItemParcelable based on the given menu and the visibility of the menu items.
+ *
+ * @param menu the menu to be displayed
+ * @return a filtered List of parcelables based on the menu
+ */
+ private static List<MenuItemParcelable> calculateMenuParcel(Menu menu) {
+ int index = 0;
+ boolean hasNext = true;
+ List<MenuItemParcelable> itemList = new ArrayList<MenuItemParcelable>();
+ MenuParcelable menuParcelable = new MenuParcelable();
+ try {
+ while (hasNext) {
+ MenuItem item = menu.getItem(index);
+ if (item.isVisible()) {
+ itemList.add(new MenuItemParcelable(item));
+ }
+ index++;
+ }
+ } catch (IndexOutOfBoundsException iobe) {
+ // reach the end of the item list
+ }
+
+ return itemList;
+ }
+}
package com.owncloud.android.ui.dialog;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
package com.owncloud.android.ui.dialog;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
+import com.owncloud.android.R;
import com.owncloud.android.lib.common.utils.Log_OC;
return null;
}
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
- .setIcon(android.R.drawable.ic_dialog_alert)
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Theme_ownCloud_Dialog)
+ .setIcon(R.drawable.ic_warning)
.setMessage(String.format(getString(resourceId), confirmationTarget))
.setTitle(android.R.string.dialog_alert_title);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
package com.owncloud.android.ui.dialog;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import com.owncloud.android.R;
import com.owncloud.android.utils.DisplayUtils;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String remotepath = getArguments().getString("remotepath");
- return new AlertDialog.Builder(getActivity())
- .setIcon(DisplayUtils.getSeasonalIconId())
+ return new AlertDialog.Builder(getActivity(), R.style.Theme_ownCloud_Dialog)
+ .setIcon(R.drawable.ic_warning)
.setTitle(R.string.conflict_title)
.setMessage(String.format(getString(R.string.conflict_message), remotepath))
.setPositiveButton(R.string.conflict_use_local_version,
.create();
}
- public void showDialog(ActionBarActivity activity) {
+ public void showDialog(AppCompatActivity activity) {
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag("dialog");
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
if (prev != null) {
this.show(ft, "dialog");
}
- public void dismissDialog(ActionBarActivity activity) {
+ public void dismissDialog(AppCompatActivity activity) {
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag(getTag());
if (prev != null) {
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.ui.activity.ComponentsGetter;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AuthenticatorActivity;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
-import android.app.AlertDialog.Builder;
+import android.support.v7.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.dialog;
+
+
+import android.app.DatePickerDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.text.format.DateUtils;
+import android.widget.DatePicker;
+import android.widget.Toast;
+
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.ui.activity.FileActivity;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Dialog requesting a date after today.
+ */
+public class ExpirationDatePickerDialogFragment
+ extends DialogFragment
+ implements DatePickerDialog.OnDateSetListener {
+
+ /** Tag for FragmentsManager */
+ public static final String DATE_PICKER_DIALOG = "DATE_PICKER_DIALOG";
+
+ /** Parameter constant for {@link OCFile} instance to set the expiration date */
+ private static final String ARG_FILE = "FILE";
+
+ /** Parameter constant for date chosen initially */
+ private static final String ARG_CHOSEN_DATE_IN_MILLIS = "CHOSEN_DATE_IN_MILLIS";
+
+ /** File to bind an expiration date */
+ private OCFile mFile;
+
+ /**
+ * Factory method to create new instances
+ *
+ * @param file File to bind an expiration date
+ * @param chosenDateInMillis Date chosen when the dialog appears
+ * @return New dialog instance
+ */
+ public static ExpirationDatePickerDialogFragment newInstance(OCFile file, long chosenDateInMillis) {
+ Bundle arguments = new Bundle();
+ arguments.putParcelable(ARG_FILE, file);
+ arguments.putLong(ARG_CHOSEN_DATE_IN_MILLIS, chosenDateInMillis);
+
+ ExpirationDatePickerDialogFragment dialog = new ExpirationDatePickerDialogFragment();
+ dialog.setArguments(arguments);
+ return dialog;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return A new dialog to let the user choose an expiration date that will be bound to a share link.
+ */
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Load arguments
+ mFile = getArguments().getParcelable(ARG_FILE);
+
+ // Chosen date received as an argument must be later than tomorrow ; default to tomorrow in other case
+ final Calendar chosenDate = Calendar.getInstance();
+ long tomorrowInMillis = chosenDate.getTimeInMillis() + DateUtils.DAY_IN_MILLIS;
+ long chosenDateInMillis = getArguments().getLong(ARG_CHOSEN_DATE_IN_MILLIS);
+ if (chosenDateInMillis > tomorrowInMillis) {
+ chosenDate.setTimeInMillis(chosenDateInMillis);
+ } else {
+ chosenDate.setTimeInMillis(tomorrowInMillis);
+ }
+
+ // Create a new instance of DatePickerDialog
+ DatePickerDialog dialog = new DatePickerDialog(
+ getActivity(),
+ this,
+ chosenDate.get(Calendar.YEAR),
+ chosenDate.get(Calendar.MONTH),
+ chosenDate.get(Calendar.DAY_OF_MONTH)
+ );
+
+ // Prevent days in the past may be chosen
+ DatePicker picker = dialog.getDatePicker();
+ picker.setMinDate(tomorrowInMillis - 1000);
+
+ // Enforce spinners view; ignored by MD-based theme in Android >=5, but calendar is REALLY buggy
+ // in Android < 5, so let's be sure it never appears (in tablets both spinners and calendar are
+ // shown by default)
+ picker.setCalendarViewShown(false);
+
+ return dialog;
+ }
+
+ /**
+ * Called when the user choses an expiration date.
+ *
+ * @param view View instance where the date was chosen
+ * @param year Year of the date chosen.
+ * @param monthOfYear Month of the date chosen [0, 11]
+ * @param dayOfMonth Day of the date chosen
+ */
+ @Override
+ public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
+
+ Calendar chosenDate = Calendar.getInstance();
+ chosenDate.set(Calendar.YEAR, year);
+ chosenDate.set(Calendar.MONTH, monthOfYear);
+ chosenDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
+ long chosenDateInMillis = chosenDate.getTimeInMillis();
+
+ ((FileActivity)getActivity()).getFileOperationsHelper().setExpirationDateToShareViaLink(
+ mFile,
+ chosenDateInMillis
+ );
+ }
+}
--- /dev/null
+package com.owncloud.android.ui.dialog;
+
+import android.support.v4.app.DialogFragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.ui.dialog.parcel.MenuItemParcelable;
+import com.owncloud.android.ui.dialog.parcel.MenuParcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog for choosing a file action.
+ */
+public class FileActionsDialogFragment extends DialogFragment implements
+ OnItemClickListener {
+ private static final String ARG_ITEM_LIST = "ITEM_LIST";
+ private static final String ARG_FILE_POSITION = "FILE_POSITION";
+ private static final String ARG_FILE_NAME = "FILE_NAME";
+ public static final String FTAG_FILE_ACTIONS = "FILE_ACTIONS_FRAGMENT";
+
+ private List<MenuItemParcelable> mMenuItems;
+
+ private int mFilePosition;
+
+ private ListView mListView;
+
+ /**
+ * Listener interface for the file action fragment.
+ */
+ public interface FileActionsDialogFragmentListener {
+ public boolean onFileActionChosen(int menuId, int filePosition);
+ }
+
+ /**
+ * Public factory method to create new FileActionsDialogFragment instances.
+ *
+ * @param menu menu to be display.
+ * @return Dialog ready to show.
+ */
+ public static FileActionsDialogFragment newInstance(Menu menu, int filePosition, String fileName) {
+ FileActionsDialogFragment fragment = new FileActionsDialogFragment();
+ Bundle args = new Bundle();
+
+ MenuParcelable menuParcelable = new MenuParcelable();
+ menuParcelable.setMenuItems(calculateMenuParcel(menu));
+
+ args.putParcelable(ARG_ITEM_LIST, menuParcelable);
+ args.putInt(ARG_FILE_POSITION, filePosition);
+ args.putCharSequence(ARG_FILE_NAME, fileName);
+
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setStyle(DialogFragment.STYLE_NORMAL, R.style.ownCloud_Dialog);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.file_actions, null, false);
+ mListView = (ListView) view.findViewById(R.id.file_actions_list);
+
+ CharSequence title = getArguments().getCharSequence(ARG_FILE_NAME);
+ if(title != null && title.length() > 0) {
+ TextView header = (TextView)view.findViewById(R.id.file_actions_header);
+ header.setText(title);
+ header.setVisibility(View.VISIBLE);
+ view.findViewById(R.id.file_actions_header_divider).setVisibility(View.VISIBLE);
+ } else {
+ getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ }
+
+ return view;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ mFilePosition = getArguments().getInt(ARG_FILE_POSITION);
+
+ MenuParcelable menu = getArguments().getParcelable(ARG_ITEM_LIST);
+ mMenuItems = menu.getMenuItems();
+ List<String> stringList = new ArrayList<String>();
+ for (int i = 0; i < mMenuItems.size(); i++) {
+ stringList.add(mMenuItems.get(i).getMenuText());
+ }
+
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
+ R.layout.simple_dialog_list_item, stringList);
+
+ mListView.setAdapter(adapter);
+
+ mListView.setOnItemClickListener(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ dismiss();
+ ((FileActionsDialogFragmentListener) getTargetFragment())
+ .onFileActionChosen(mMenuItems.get(position).getMenuItemId(), mFilePosition);
+ }
+
+ /**
+ * calculates a parcelable list of MenuItemParcelable based on the given menu and the visibility of the menu items.
+ *
+ * @param menu the menu to be displayed
+ * @return a filtered List of parcelables based on the menu
+ */
+ private static List<MenuItemParcelable> calculateMenuParcel(Menu menu) {
+ int index = 0;
+ boolean hasNext = true;
+ List<MenuItemParcelable> itemList = new ArrayList<MenuItemParcelable>();
+ MenuParcelable menuParcelable = new MenuParcelable();
+ try {
+ while (hasNext) {
+ MenuItem item = menu.getItem(index);
+ if (item.isVisible()) {
+ itemList.add(new MenuItemParcelable(item));
+ }
+ index++;
+ }
+ } catch (IndexOutOfBoundsException iobe) {
+ // reach the end of the item list
+ }
+
+ return itemList;
+ }
+}
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.KeyEvent;
+import android.widget.ProgressBar;
import com.owncloud.android.R;
*/
public static IndeterminateProgressDialog newInstance(int messageId, boolean cancelable) {
IndeterminateProgressDialog fragment = new IndeterminateProgressDialog();
+ fragment.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.ownCloud_AlertDialog);
Bundle args = new Bundle();
args.putInt(ARG_MESSAGE_ID, messageId);
args.putBoolean(ARG_CANCELABLE, cancelable);
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
/// create indeterminate progress dialog
- final ProgressDialog dialog = new ProgressDialog(getActivity());
- dialog.setIndeterminate(true);
+ final ProgressDialog progressDialog = new ProgressDialog(getActivity(), R.style.ProgressDialogTheme);
+ progressDialog.setIndeterminate(true);
+ progressDialog.setOnShowListener(new DialogInterface.OnShowListener() {
+ @Override
+ public void onShow(DialogInterface dialog) {
+ ProgressBar v = (ProgressBar) progressDialog.findViewById(android.R.id.progress);
+ v.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.color_accent),
+ android.graphics.PorterDuff.Mode.MULTIPLY);
+
+ }
+ });
/// set message
int messageId = getArguments().getInt(ARG_MESSAGE_ID, R.string.placeholder_sentence);
- dialog.setMessage(getString(messageId));
-
+ progressDialog.setMessage(getString(messageId));
+
/// set cancellation behavior
boolean cancelable = getArguments().getBoolean(ARG_CANCELABLE, false);
if (!cancelable) {
- dialog.setCancelable(false);
+ progressDialog.setCancelable(false);
// disable the back button
OnKeyListener keyListener = new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
- if( keyCode == KeyEvent.KEYCODE_BACK){
+ if( keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return false;
}
};
- dialog.setOnKeyListener(keyListener);
+ progressDialog.setOnKeyListener(keyListener);
}
- return dialog;
+ return progressDialog;
}
}
import com.owncloud.android.R;
import android.app.Dialog;
+import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
+import android.widget.ProgressBar;
import android.widget.TextView;
public class LoadingDialog extends DialogFragment {
// set value
TextView tv = (TextView) v.findViewById(R.id.loadingText);
tv.setText(mMessage);
+
+ // set progress wheel color
+ ProgressBar progressBar = (ProgressBar) v.findViewById(R.id.loadingBar);
+ progressBar.getIndeterminateDrawable().setColorFilter(
+ getResources().getColor(R.color.color_accent), PorterDuff.Mode.SRC_IN);
return v;
}
--- /dev/null
+package com.owncloud.android.ui.dialog;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.PreferenceManager;
+import android.support.v7.app.AppCompatDialog;
+import android.util.AttributeSet;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+import java.lang.reflect.Method;
+
+public class OwnCloudListPreference extends ListPreference {
+ private static final String TAG = OwnCloudListPreference.class.getSimpleName();
+
+ private Context mContext;
+ private AppCompatDialog mDialog;
+
+ public OwnCloudListPreference(Context context) {
+ super(context);
+ this.mContext = context;
+ }
+
+ public OwnCloudListPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.mContext = context;
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public OwnCloudListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public OwnCloudListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void showDialog(Bundle state) {
+ if (getEntries() == null || getEntryValues() == null) {
+ throw new IllegalStateException(
+ "ListPreference requires an entries array and an entryValues array.");
+ }
+
+ int preselect = findIndexOfValue(getValue());
+
+ // same thing happens for the Standard ListPreference though
+ android.support.v7.app.AlertDialog.Builder builder =
+ new android.support.v7.app.AlertDialog.Builder(mContext, R.style.ownCloud_AlertDialog)
+ .setTitle(getDialogTitle())
+ .setIcon(getDialogIcon())
+ .setSingleChoiceItems(getEntries(), preselect, this);
+
+ PreferenceManager pm = getPreferenceManager();
+ try {
+ Method method = pm.getClass().getDeclaredMethod(
+ "registerOnActivityDestroyListener",
+ PreferenceManager.OnActivityDestroyListener.class);
+ method.setAccessible(true);
+ method.invoke(pm, this);
+ } catch (Exception e) {
+ // no way to handle this but logging it
+ Log_OC.e(TAG, "error invoking registerOnActivityDestroyListener", e);
+ }
+
+ mDialog = builder.create();
+ if (state != null) {
+ mDialog.onRestoreInstanceState(state);
+ }
+ mDialog.show();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (which >= 0 && getEntryValues() != null) {
+ String value = getEntryValues()[which].toString();
+ if (callChangeListener(value)) {
+ setValue(value);
+
+ // Workaround for pre kitkat since they don't support change listener within setValue
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ setSummary(getEntries()[which]);
+ }
+ }
+ dialog.dismiss();
+ }
+ }
+
+ @Override
+ public AppCompatDialog getDialog() {
+ return mDialog;
+ }
+
+ @Override
+ public void onActivityDestroy() {
+ super.onActivityDestroy();
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.dismiss();
+ }
+ }
+}
*
* Triggers the removal according to the user response.
*/
-import java.util.Vector;
import android.app.Dialog;
import android.os.Bundle;
public class RemoveFileDialogFragment extends ConfirmationDialogFragment
implements ConfirmationDialogFragmentListener {
+ private OCFile mTargetFile;
+
private static final String ARG_TARGET_FILE = "TARGET_FILE";
/**
RemoveFileDialogFragment frag = new RemoveFileDialogFragment();
Bundle args = new Bundle();
- int messageStringId = R.string.confirmation_remove_alert;
+ int messageStringId = R.string.confirmation_remove_file_alert;
- int posBtn = R.string.confirmation_remove_remote;
- int neuBtn = -1;
+ int posBtn = R.string.confirmation_remove_file_remote;
+ int negBtn = -1;
if (file.isFolder()) {
messageStringId = R.string.confirmation_remove_folder_alert;
posBtn = R.string.confirmation_remove_remote_and_local;
- neuBtn = R.string.confirmation_remove_folder_local;
+ negBtn = R.string.confirmation_remove_local;
} else if (file.isDown()) {
posBtn = R.string.confirmation_remove_remote_and_local;
- neuBtn = R.string.confirmation_remove_local;
+ negBtn = R.string.confirmation_remove_local;
}
-
args.putInt(ARG_CONF_RESOURCE_ID, messageStringId);
args.putStringArray(ARG_CONF_ARGUMENTS, new String[]{file.getFileName()});
args.putInt(ARG_POSITIVE_BTN_RES, posBtn);
- args.putInt(ARG_NEUTRAL_BTN_RES, neuBtn);
- args.putInt(ARG_NEGATIVE_BTN_RES, R.string.common_cancel);
+ args.putInt(ARG_NEUTRAL_BTN_RES, R.string.common_no);
+ args.putInt(ARG_NEGATIVE_BTN_RES, negBtn);
args.putParcelable(ARG_TARGET_FILE, file);
frag.setArguments(args);
return frag;
}
-
- private OCFile mTargetFile;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
* Performs the removal of the local copy of the target file
*/
@Override
- public void onNeutral(String callerTag) {
+ public void onCancel(String callerTag) {
ComponentsGetter cg = (ComponentsGetter)getActivity();
cg.getFileOperationsHelper().removeFile(mTargetFile, true);
-
- FileDataStorageManager storageManager = cg.getStorageManager();
-
- boolean containsFavorite = false;
- if (mTargetFile.isFolder()) {
- // TODO Enable when "On Device" is recovered ?
- Vector<OCFile> files = storageManager.getFolderContent(mTargetFile/*, false*/);
- for(OCFile file: files) {
- containsFavorite = file.isFavorite() || containsFavorite;
-
- if (containsFavorite)
- break;
- }
- }
-
- // Remove etag for parent, if file is a favorite
- // or is a folder and contains favorite
- if (mTargetFile.isFavorite() || containsFavorite) {
- OCFile folder = null;
- if (mTargetFile.isFolder()) {
- folder = mTargetFile;
- } else {
- folder = storageManager.getFileById(mTargetFile.getParentId());
- }
-
- folder.setEtag("");
- storageManager.saveFile(folder);
- }
}
@Override
- public void onCancel(String callerTag) {
+ public void onNeutral(String callerTag) {
// nothing to do here
}
-
}
\ No newline at end of file
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.dialog;
+
+/**
+ * Dialog requiring confirmation before removing a given OCFile.
+ *
+ * Triggers the removal according to the user response.
+ */
+
+import android.app.Dialog;
+import android.content.res.Resources;
+import android.os.Bundle;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.ui.activity.ComponentsGetter;
+import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
+
+import java.util.ArrayList;
+import java.util.Vector;
+
+public class RemoveFilesDialogFragment extends ConfirmationDialogFragment
+implements ConfirmationDialogFragmentListener {
+
+ private ArrayList<OCFile> mTargetFiles;
+
+ private static final String ARG_TARGET_FILES = "TARGET_FILES";
+
+ /**
+ * Public factory method to create new RemoveFileDialogFragment instances.
+ *
+ * @param files Files to remove.
+ * @return Dialog ready to show.
+ */
+ public static RemoveFilesDialogFragment newInstance(ArrayList<OCFile> files) {
+ RemoveFilesDialogFragment frag = new RemoveFilesDialogFragment();
+ Bundle args = new Bundle();
+
+ int messageStringId = R.string.confirmation_remove_files_alert;
+
+ int posBtn = R.string.confirmation_remove_file_remote;
+ int negBtn = -1;
+
+ boolean containsFolder = false;
+ boolean containsDown = false;
+ for (OCFile file: files) {
+ if (file.isFolder()) containsFolder = true;
+ if (file.isDown()) containsDown = true;
+ }
+
+ if (containsFolder) {
+ messageStringId = R.string.confirmation_remove_folders_alert;
+ posBtn = R.string.confirmation_remove_remote_and_local;
+ negBtn = R.string.confirmation_remove_local;
+ } else if (containsDown) {
+ posBtn = R.string.confirmation_remove_remote_and_local;
+ negBtn = R.string.confirmation_remove_local;
+ }
+
+ args.putInt(ARG_CONF_RESOURCE_ID, messageStringId);
+ args.putStringArray(ARG_CONF_ARGUMENTS, new String[]{MainApp.getAppContext().getString(R.string.confirmation_remove_files)});
+ args.putInt(ARG_POSITIVE_BTN_RES, posBtn);
+ args.putInt(ARG_NEUTRAL_BTN_RES, R.string.common_no);
+ args.putInt(ARG_NEGATIVE_BTN_RES, negBtn);
+ args.putParcelableArrayList(ARG_TARGET_FILES, files);
+ frag.setArguments(args);
+
+ return frag;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+ mTargetFiles = getArguments().getParcelableArrayList(ARG_TARGET_FILES);
+
+ setOnConfirmationListener(this);
+
+ return dialog;
+ }
+
+ /**
+ * Performs the removal of the target file, both locally and in the server.
+ */
+ @Override
+ public void onConfirmation(String callerTag) {
+ ComponentsGetter cg = (ComponentsGetter) getActivity();
+ FileDataStorageManager storageManager = cg.getStorageManager();
+ for (OCFile targetFile : mTargetFiles) {
+ if (storageManager.getFileById(targetFile.getFileId()) != null) {
+ cg.getFileOperationsHelper().removeFile(targetFile, false);
+ }
+ }
+ }
+
+ /**
+ * Performs the removal of the local copy of the target file
+ */
+ @Override
+ public void onCancel(String callerTag) {
+ ComponentsGetter cg = (ComponentsGetter) getActivity();
+
+ for (OCFile targetFile : mTargetFiles) {
+ cg.getFileOperationsHelper().removeFile(targetFile, true);
+
+ FileDataStorageManager storageManager = cg.getStorageManager();
+
+ boolean containsFavorite = false;
+ if (targetFile.isFolder()) {
+ Vector<OCFile> files = storageManager.getFolderContent(targetFile, false);
+ for (OCFile file : files) {
+ containsFavorite = file.isFavorite() || containsFavorite;
+
+ if (containsFavorite)
+ break;
+ }
+ }
+
+ // Remove etag for parent, if file is a favorite
+ // or is a folder and contains favorite
+ if (targetFile.isFavorite() || containsFavorite) {
+ OCFile folder = null;
+ if (targetFile.isFolder()) {
+ folder = targetFile;
+ } else {
+ folder = storageManager.getFileById(targetFile.getParentId());
+ }
+
+ folder.setEtag("");
+ storageManager.saveFile(folder);
+ }
+ }
+ }
+
+ @Override
+ public void onNeutral(String callerTag) {
+ // nothing to do here
+ }
+}
\ No newline at end of file
*
* Triggers the rename operation.
*/
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import java.util.Iterator;
import java.util.List;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.widget.TextView;
import com.owncloud.android.R;
-import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.ui.activity.ComponentsGetter;
import com.owncloud.android.ui.activity.CopyToClipboardActivity;
-import com.owncloud.android.ui.activity.FileActivity;
/**
* Dialog showing a list activities able to resolve a given Intent,
".ARG_INTENT";
private final static String ARG_PACKAGES_TO_EXCLUDE = ShareLinkToDialog.class.getSimpleName() +
".ARG_PACKAGES_TO_EXCLUDE";
- private final static String ARG_FILE_TO_SHARE = ShareLinkToDialog.class.getSimpleName() +
- ".FILE_TO_SHARE";
-
+
private ActivityAdapter mAdapter;
- private OCFile mFile;
private Intent mIntent;
- public static ShareLinkToDialog newInstance(Intent intent, String[] packagesToExclude,
- OCFile fileToShare) {
+ public static ShareLinkToDialog newInstance(Intent intent, String[] packagesToExclude) {
ShareLinkToDialog f = new ShareLinkToDialog();
Bundle args = new Bundle();
args.putParcelable(ARG_INTENT, intent);
args.putStringArray(ARG_PACKAGES_TO_EXCLUDE, packagesToExclude);
- args.putParcelable(ARG_FILE_TO_SHARE, fileToShare);
f.setArguments(args);
return f;
}
String[] packagesToExclude = getArguments().getStringArray(ARG_PACKAGES_TO_EXCLUDE);
List<String> packagesToExcludeList = Arrays.asList(packagesToExclude != null ?
packagesToExclude : new String[0]);
- mFile = getArguments().getParcelable(ARG_FILE_TO_SHARE);
-
+
PackageManager pm= getActivity().getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(mIntent,
PackageManager.MATCH_DEFAULT_ONLY);
ComponentName name=new ComponentName(
actInfo.applicationInfo.packageName,
actInfo.name);
- mIntent.setComponent(name);
-
- if (sendAction) {
- dialog.dismiss(); // explicitly added for Android 2.x devices
-
- // Send the file
- ((FileActivity)getActivity()).startActivity(mIntent);
+ mIntent.setComponent(name);
- } else {
- // Create a new share resource
- ((ComponentsGetter)getActivity()).getFileOperationsHelper()
- .shareFileWithLinkToApp(mFile, "", mIntent);
- }
+ // Send the file
+ getActivity().startActivity(mIntent);
}
})
.create();
*/
package com.owncloud.android.ui.dialog;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
-import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
implements DialogInterface.OnClickListener {
private static final String ARG_FILE = "FILE";
- private static final String ARG_SEND_INTENT = "SEND_INTENT";
+ private static final String ARG_CREATE_SHARE = "CREATE_SHARE";
public static final String PASSWORD_FRAGMENT = "PASSWORD_FRAGMENT";
private OCFile mFile;
- private Intent mSendIntent;
+ private boolean mCreateShare;
/**
* Public factory method to create new SharePasswordDialogFragment instances.
*
- * @param file
- * @param sendIntent
- * @return Dialog ready to show.
+ * @param file OCFile bound to the public share that which password will be set or updated
+ * @param createShare When 'true', the public share will be created; when 'false', will be assumed
+ * that the public share already exists, and its state will be directly updated.
+ * @return Dialog ready to show.
*/
- public static SharePasswordDialogFragment newInstance(OCFile file, Intent sendIntent) {
+ public static SharePasswordDialogFragment newInstance(OCFile file, boolean createShare) {
SharePasswordDialogFragment frag = new SharePasswordDialogFragment();
Bundle args = new Bundle();
args.putParcelable(ARG_FILE, file);
- args.putParcelable(ARG_SEND_INTENT, sendIntent);
+ args.putBoolean(ARG_CREATE_SHARE, createShare);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mFile = getArguments().getParcelable(ARG_FILE);
- mSendIntent = getArguments().getParcelable(ARG_SEND_INTENT);
+ mCreateShare = getArguments().getBoolean(ARG_CREATE_SHARE, false);
// Inflate the layout for the dialog
LayoutInflater inflater = getActivity().getLayoutInflater();
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == AlertDialog.BUTTON_POSITIVE) {
- // Enable the flag "Share again"
- ((FileActivity) getActivity()).setTryShareAgain(true);
-
String password =
((TextView)(getDialog().findViewById(R.id.share_password)))
.getText().toString();
return;
}
- // Share the file
- ((FileActivity)getActivity()).getFileOperationsHelper()
- .shareFileWithLinkToApp(mFile, password, mSendIntent);
+ if (mCreateShare) {
+ // Share the file
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ shareFileViaLink(mFile, password);
- } else {
- // Disable the flag "Share again"
- ((FileActivity) getActivity()).setTryShareAgain(false);
+ } else {
+ // updat existing link
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ setPasswordToShareViaLink(mFile, password);
+ }
}
}
}
package com.owncloud.android.ui.dialog;
import android.accounts.Account;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
--- /dev/null
+package com.owncloud.android.ui.dialog.parcel;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.view.MenuItem;
+
+public class MenuItemParcelable implements Parcelable {
+ int mMenuItemId;
+ String mMenuText;
+
+ public MenuItemParcelable() {}
+
+ public MenuItemParcelable(MenuItem menuItem) {
+ mMenuItemId = menuItem.getItemId();
+ mMenuText = menuItem.getTitle().toString();
+ }
+
+ public MenuItemParcelable(Parcel read) {
+ mMenuItemId = read.readInt();
+ }
+
+ public void setMenuItemId(int id) {
+ mMenuItemId = id;
+ }
+
+ public int getMenuItemId() {
+ return mMenuItemId;
+ }
+
+ public String getMenuText() {
+ return mMenuText;
+ }
+
+ public void setMenuText(String mMenuText) {
+ this.mMenuText = mMenuText;
+ }
+
+ public static final Parcelable.Creator<MenuItemParcelable> CREATOR =
+ new Parcelable.Creator<MenuItemParcelable>() {
+
+ @Override
+ public MenuItemParcelable createFromParcel(Parcel source) {
+ return new MenuItemParcelable(source);
+ }
+
+ @Override
+ public MenuItemParcelable[] newArray(int size) {
+ return new MenuItemParcelable[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mMenuItemId);
+ }
+}
--- /dev/null
+package com.owncloud.android.ui.dialog.parcel;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MenuParcelable implements Parcelable {
+
+ private List<MenuItemParcelable> mMenuItems = new ArrayList<MenuItemParcelable>();
+
+ public List<MenuItemParcelable> getMenuItems() {
+ return mMenuItems;
+ }
+
+ public void setMenuItems(List<MenuItemParcelable> menuItems) {
+ this.mMenuItems = menuItems;
+ }
+
+ public MenuParcelable() {
+ mMenuItems = new ArrayList<MenuItemParcelable>();
+ }
+
+ public MenuParcelable(Parcel in) {
+ in.readTypedList(mMenuItems, MenuItemParcelable.CREATOR);
+ }
+
+ public static final Parcelable.Creator<MenuParcelable> CREATOR = new Parcelable.Creator<MenuParcelable>() {
+
+ @Override
+ public MenuParcelable createFromParcel(Parcel in) {
+ return new MenuParcelable(in);
+ }
+
+ @Override
+ public MenuParcelable[] newArray(int size) {
+ return new MenuParcelable[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel outParcel, int flags) {
+ outParcel.writeTypedList(mMenuItems);
+ }
+}
import java.util.ArrayList;
+import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
+import android.view.ActionMode;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
+import android.widget.Toast;
+import com.getbase.floatingactionbutton.FloatingActionButton;
+import com.getbase.floatingactionbutton.FloatingActionsMenu;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.ExtendedListView;
import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
import com.owncloud.android.ui.adapter.FileListListAdapter;
+import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
import third_parties.in.srain.cube.GridViewWithHeaderAndFooter;
private SwipeRefreshLayout mRefreshGridLayout;
private SwipeRefreshLayout mRefreshEmptyLayout;
private TextView mEmptyListMessage;
+
+ private FloatingActionsMenu fabMain;
+ private FloatingActionButton fabUpload;
+ private FloatingActionButton fabMkdir;
+ private FloatingActionButton fabUploadFromApp;
// Save the state of the scroll in browsing
private ArrayList<Integer> mIndexes;
private ArrayList<Integer> mTops;
private int mHeightCell = 0;
- private OnEnforceableRefreshListener mOnRefreshListener = null;
-
+ private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null;
+
protected AbsListView mCurrentListView;
private ExtendedListView mListView;
private View mListFooterView;
return mCurrentListView;
}
+ public FloatingActionButton getFabUpload() {
+ return fabUpload;
+ }
+
+ public FloatingActionButton getFabUploadFromApp() {
+ return fabUploadFromApp;
+ }
+
+ public FloatingActionButton getFabMkdir() {
+ return fabMkdir;
+ }
- protected void switchToGridView() {
+ public FloatingActionsMenu getFabMain() {
+ return fabMain;
+ }
+
+ public void switchToGridView() {
if ((mCurrentListView == mListView)) {
mListView.setAdapter(null);
mCurrentListView = mGridView;
}
}
-
- protected void switchToListView() {
+
+ public void switchToListView() {
if (mCurrentListView == mGridView) {
mGridView.setAdapter(null);
mRefreshGridLayout.setVisibility(View.GONE);
mCurrentListView = mListView;
}
}
+
+ public boolean isGridView(){
+ if (mAdapter instanceof FileListListAdapter) {
+ return ((FileListListAdapter) mAdapter).isGridMode();
+ }
+ return false;
+ }
@Override
Bundle savedInstanceState) {
Log_OC.d(TAG, "onCreateView");
+ // TODO Tobi remove
+// AbsListView.MultiChoiceModeListener listener = new AbsListView.MultiChoiceModeListener() {
+// @Override
+// public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
+// // Capture total checked items
+// final int checkedCount = mListView.getCheckedItemCount();
+// // Set the CAB title according to total checked items
+// mode.setTitle(checkedCount + " Selected");
+// // Calls toggleSelection method from ListViewAdapter Class
+// // mAdapter.toggleSelection(position);
+//
+// if (checked){
+// mAdapter.setNewSelection(position,checked);
+// } else {
+// mAdapter.removeSelection(position);
+// }
+// }
+//
+// @Override
+// public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+// mode.getMenuInflater().inflate(R.menu.context, menu);
+// return true;
+// }
+//
+// @Override
+// public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+// return false;
+// }
+//
+// @Override
+// public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+// return false;
+// }
+//
+// @Override
+// public void onDestroyActionMode(ActionMode mode) {
+// // mAdapter.removeSelection();
+// }
+// };
+
View v = inflater.inflate(R.layout.list_fragment, null);
mListView = (ExtendedListView)(v.findViewById(R.id.list_root));
mListView.setOnItemClickListener(this);
+ mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
+ // mListView.setMultiChoiceModeListener(listener);
mListFooterView = inflater.inflate(R.layout.list_footer, null, false);
mGridView = (GridViewWithHeaderAndFooter) (v.findViewById(R.id.grid_root));
mGridView.setNumColumns(GridView.AUTO_FIT);
mGridView.setOnItemClickListener(this);
+ mGridView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
+
+ // mGridView.setMultiChoiceModeListener(listener);
+
mGridFooterView = inflater.inflate(R.layout.list_footer, null, false);
if (savedInstanceState != null) {
mCurrentListView = mListView; // list as default
+ fabMain = (FloatingActionsMenu) v.findViewById(R.id.fab_main);
+ fabUpload = (FloatingActionButton) v.findViewById(R.id.fab_upload);
+ fabMkdir = (FloatingActionButton) v.findViewById(R.id.fab_mkdir);
+ fabUploadFromApp = (FloatingActionButton) v.findViewById(R.id.fab_upload_from_app);
+
return v;
}
}
/**
+ * Disables FAB.
+ *
+ * Sets the 'visibility' state of the FAB contained in the fragment.
+ *
+ * When 'false' is set, FAB visibility is set to View.GONE programatically,
+ *
+ * @param enabled Desired visibility for the FAB.
+ */
+ public void setFabEnabled(boolean enabled) {
+ if(enabled) {
+ fabMain.setVisibility(View.VISIBLE);
+ } else {
+ fabMain.setVisibility(View.GONE);
+ }
+ }
+
+ /**
* Set message for empty list view
*/
public void setMessageForEmptyList(String message) {
}
private void onCreateSwipeToRefresh(SwipeRefreshLayout refreshLayout) {
- // Colors in animations: background
- refreshLayout.setColorScheme(R.color.background_color, R.color.background_color,
- R.color.background_color, R.color.background_color);
+ // Colors in animations
+ refreshLayout.setColorSchemeResources(R.color.color_accent, R.color.primary,
+ R.color.primary_dark);
refreshLayout.setOnRefreshListener(this);
}
mRefreshEmptyLayout.setRefreshing(false);
if (mOnRefreshListener != null) {
- mOnRefreshListener.onRefresh(ignoreETag);
+ mOnRefreshListener.onRefresh();
}
}
*/
package com.owncloud.android.ui.fragment;
-import java.lang.ref.WeakReference;
-
import android.accounts.Account;
-import android.content.Intent;
+import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.widget.ProgressBar;
import android.widget.TextView;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.files.FileMenuFilter;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.services.observer.FileObserverService;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.MimetypeIconUtil;
+
+import java.lang.ref.WeakReference;
/**
private int mLayout;
private View mView;
private Account mAccount;
-
+
public ProgressListener mProgressListener;
-
+
private static final String TAG = FileDetailFragment.class.getSimpleName();
public static final String FTAG_CONFIRMATION = "REMOVE_CONFIRMATION_FRAGMENT";
public static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT";
mLayout = R.layout.file_details_empty;
mProgressListener = null;
}
-
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
-
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
mAccount = getArguments().getParcelable(ARG_ACCOUNT);
if (savedInstanceState != null) {
- setFile((OCFile)savedInstanceState.getParcelable(FileActivity.EXTRA_FILE));
+ setFile((OCFile) savedInstanceState.getParcelable(FileActivity.EXTRA_FILE));
mAccount = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT);
}
-
- if(getFile() != null && mAccount != null) {
+
+ if (getFile() != null && mAccount != null) {
mLayout = R.layout.file_details_fragment;
}
-
+
mView = inflater.inflate(mLayout, null);
if (mLayout == R.layout.file_details_fragment) {
mView.findViewById(R.id.fdFavorite).setOnClickListener(this);
ProgressBar progressBar = (ProgressBar)mView.findViewById(R.id.fdProgressBar);
+ DisplayUtils.colorPreLollipopHorizontalProgressBar(progressBar);
mProgressListener = new ProgressListener(progressBar);
mView.findViewById(R.id.fdCancelBtn).setOnClickListener(this);
}
super.onStart();
listenForTransferProgress();
}
-
+
@Override
public void onStop() {
leaveTransferProgress();
super.onStop();
}
-
+
@Override
public View getView() {
return super.getView() == null ? mView : super.getView();
}
-
+
/**
* {@inheritDoc}
*/
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.file_actions_menu, menu);
- }
+ }
+
-
/**
* {@inheritDoc}
*/
@Override
- public void onPrepareOptionsMenu (Menu menu) {
+ public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
-
+
if (mContainerActivity.getStorageManager() != null) {
FileMenuFilter mf = new FileMenuFilter(
getFile(),
);
mf.filter(menu);
}
-
+
// additional restriction for this fragment
MenuItem item = menu.findItem(R.id.action_see_details);
if (item != null) {
item.setVisible(false);
item.setEnabled(false);
}
+
+ // additional restriction for this fragment
+ item = menu.findItem(R.id.action_copy);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_switch_view);
+ if (item != null){
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_sync_account);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_sort);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
}
-
+
/**
* {@inheritDoc}
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
- return true;
- }
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
+ mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
return true;
}
case R.id.action_open_file_with: {
dialog.show(getFragmentManager(), FTAG_RENAME_FILE);
return true;
}
- case R.id.action_cancel_download:
- case R.id.action_cancel_upload: {
+ case R.id.action_cancel_sync: {
((FileDisplayActivity)mContainerActivity).cancelTransference(getFile());
return true;
}
- case R.id.action_download_file:
+ case R.id.action_download_file:
case R.id.action_sync_file: {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
// Obtain the file
if (!getFile().isDown()) { // Download the file
Log_OC.d(TAG, getFile().getRemotePath() + " : File must be downloaded");
- ((FileDisplayActivity)mContainerActivity).startDownloadForSending(getFile());
-
- } else {
+ ((FileDisplayActivity) mContainerActivity).startDownloadForSending(getFile());
+ }
+ else {
mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
}
return true;
break;
}
case R.id.fdCancelBtn: {
- ((FileDisplayActivity)mContainerActivity).cancelTransference(getFile());
+ ((FileDisplayActivity) mContainerActivity).cancelTransference(getFile());
break;
}
default:
}
}
-
/**
* Check if the fragment was created with an empty layout. An empty fragment can't show file details, must be replaced.
- *
- * @return True when the fragment was created with the empty layout.
+ *
+ * @return True when the fragment was created with the empty layout.
*/
public boolean isEmpty() {
return (mLayout == R.layout.file_details_empty || getFile() == null || mAccount == null);
}
-
+
/**
* Use this method to signal this Activity that it shall update its view.
- *
+ *
* @param file : An {@link OCFile}
*/
public void updateFileDetails(OCFile file, Account ocAccount) {
/**
* Updates the view with all relevant details about that file.
+ * <p/>
+ * TODO Remove parameter when the transferring state of files is kept in database.
*
- * TODO Remove parameter when the transferring state of files is kept in database.
- *
- * @param transferring Flag signaling if the file should be considered as downloading or uploading,
- * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and
- * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false.
- *
- * @param refresh If 'true', try to refresh the whole file from the database
+ * @param transferring Flag signaling if the file should be considered as downloading or uploading,
+ * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and
+ * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false.
+ * @param refresh If 'true', try to refresh the whole file from the database
*/
public void updateFileDetails(boolean transferring, boolean refresh) {
if (readyToShow()) {
setFile(storageManager.getFileByPath(getFile().getRemotePath()));
}
OCFile file = getFile();
-
+
// set file details
setFilename(file.getFileName());
- setFiletype(file.getMimetype(), file.getFileName());
+ setFiletype(file);
setFilesize(file.getFileLength());
setTimeModified(file.getModificationTimestamp());
(uploaderBinder != null && uploaderBinder.isUploading(mAccount, file))
) {
setButtonsForTransferring();
-
+
} else if (file.isDown()) {
setButtonsForDown();
}
getView().invalidate();
}
-
+
/**
* Checks if the fragment is ready to show details of a OCFile
- *
- * @return 'True' when the fragment is ready to show details of a file
+ *
+ * @return 'True' when the fragment is ready to show details of a file
*/
private boolean readyToShow() {
- return (getFile() != null && mAccount != null && mLayout == R.layout.file_details_fragment);
+ return (getFile() != null && mAccount != null && mLayout == R.layout.file_details_fragment);
}
/**
* Updates the filename in view
+ *
* @param filename to set
*/
private void setFilename(String filename) {
TextView tv = (TextView) getView().findViewById(R.id.fdFilename);
- if (tv != null)
+ if (tv != null) {
tv.setText(filename);
+ }
}
/**
* Updates the MIME type in view
- * @param mimetype MIME type to set
- * @param filename Name of the file, to deduce the icon to use in case the MIME type is not precise enough
+ * @param file : An {@link OCFile}
*/
- private void setFiletype(String mimetype, String filename) {
+ private void setFiletype(OCFile file) {
+ String mimetype = file.getMimetype();
TextView tv = (TextView) getView().findViewById(R.id.fdType);
if (tv != null) {
+ // mimetype MIME type to set
String printableMimetype = DisplayUtils.convertMIMEtoPrettyPrint(mimetype);
tv.setText(printableMimetype);
}
+
ImageView iv = (ImageView) getView().findViewById(R.id.fdIcon);
+
if (iv != null) {
- iv.setImageResource(DisplayUtils.getFileTypeIconId(mimetype, filename));
+ Bitmap thumbnail;
+ iv.setTag(file.getFileId());
+
+ if (file.isImage()) {
+ String tagId = String.valueOf(file.getRemoteId());
+ thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(tagId);
+
+ if (thumbnail != null && !file.needsUpdateThumbnail()) {
+ iv.setImageBitmap(thumbnail);
+ } else {
+ // generate new Thumbnail
+ if (ThumbnailsCacheManager.cancelPotentialWork(file, iv)) {
+ final ThumbnailsCacheManager.ThumbnailGenerationTask task =
+ new ThumbnailsCacheManager.ThumbnailGenerationTask(
+ iv, mContainerActivity.getStorageManager(), mAccount
+ );
+ if (thumbnail == null) {
+ thumbnail = ThumbnailsCacheManager.mDefaultImg;
+ }
+ final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =
+ new ThumbnailsCacheManager.AsyncDrawable(
+ MainApp.getAppContext().getResources(),
+ thumbnail,
+ task
+ );
+ iv.setImageDrawable(asyncDrawable);
+ task.execute(file);
+ }
+ }
+ } else {
+ // Name of the file, to deduce the icon to use in case the MIME type is not precise enough
+ String filename = file.getFileName();
+ iv.setImageResource(MimetypeIconUtil.getFileTypeIconId(mimetype, filename));
+ }
}
}
/**
* Updates the file size in view
+ *
* @param filesize in bytes to set
*/
private void setFilesize(long filesize) {
TextView tv = (TextView) getView().findViewById(R.id.fdSize);
- if (tv != null)
+ if (tv != null) {
tv.setText(DisplayUtils.bytesToHumanReadable(filesize));
+ }
}
-
+
/**
* Updates the time that the file was last modified
+ *
* @param milliseconds Unix time to set
*/
- private void setTimeModified(long milliseconds){
+ private void setTimeModified(long milliseconds) {
TextView tv = (TextView) getView().findViewById(R.id.fdModified);
- if(tv != null){
+ if (tv != null) {
tv.setText(DisplayUtils.unixTimeToHumanReadable(milliseconds));
}
}
-
+
/**
* Enables or disables buttons for a file being downloaded
*/
// show the progress bar for the transfer
getView().findViewById(R.id.fdProgressBlock).setVisibility(View.VISIBLE);
- TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText);
progressText.setVisibility(View.VISIBLE);
FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
//if (getFile().isDownloading()) {
if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, getFile())) {
progressText.setText(R.string.downloader_download_in_progress_ticker);
- } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, getFile())) {
- progressText.setText(R.string.uploader_upload_in_progress_ticker);
+ }
+ else {
+ if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, getFile())) {
+ progressText.setText(R.string.uploader_upload_in_progress_ticker);
+ }
}
}
}
/**
- * Enables or disables buttons for a file locally available
+ * Enables or disables buttons for a file locally available
*/
private void setButtonsForDown() {
if (!isEmpty()) {
// hides the progress bar
getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE);
- TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText);
progressText.setVisibility(View.GONE);
}
}
/**
- * Enables or disables buttons for a file not locally available
+ * Enables or disables buttons for a file not locally available
*/
private void setButtonsForRemote() {
if (!isEmpty()) {
// hides the progress bar
getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE);
- TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText);
progressText.setVisibility(View.GONE);
}
}
-
+
public void listenForTransferProgress() {
if (mProgressListener != null) {
}
}
}
-
-
+
+
public void leaveTransferProgress() {
if (mProgressListener != null) {
if (mContainerActivity.getFileDownloaderBinder() != null) {
}
-
/**
* Helper class responsible for updating the progress bar shown for file uploading or
* downloading
private class ProgressListener implements OnDatatransferProgressListener {
int mLastPercent = 0;
WeakReference<ProgressBar> mProgressBar = null;
-
+
ProgressListener(ProgressBar progressBar) {
mProgressBar = new WeakReference<ProgressBar>(progressBar);
}
-
+
@Override
public void onTransferProgress(long progressRate, long totalTransferredSoFar,
long totalToTransfer, String filename) {
* @param downloading Flag signaling if the file is now downloading.
* @param uploading Flag signaling if the file is now uploading.
*/
- public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading);
+ public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading);
-
}
}
import com.owncloud.android.R;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.adapter.LocalFileListAdapter;
+import com.owncloud.android.utils.FileStorageUtils;
/**
/** Adapter to connect the data from the directory with the View object */
private LocalFileListAdapter mAdapter = null;
-
/**
* {@inheritDoc}
*/
View v = super.onCreateView(inflater, container, savedInstanceState);
setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
setSwipeEnabled(false); // Disable pull-to-refresh
+ setFabEnabled(false); // Disable FAB
setMessageForEmptyList(getString(R.string.local_file_list_empty));
Log_OC.i(TAG, "onCreateView() end");
return v;
ImageView checkBoxV = (ImageView) v.findViewById(R.id.custom_checkbox);
if (checkBoxV != null) {
if (((ListView)getListView()).isItemChecked(position)) {
- checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);
+ checkBoxV.setImageResource(R.drawable.ic_checkbox_marked);
} else {
- checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);
+ checkBoxV.setImageResource(R.drawable.ic_checkbox_blank_outline);
}
}
// notify the change to the container Activity
return result.toArray(new String[result.size()]);
}
-
+ public void sortByName(boolean descending) {
+ mAdapter.setSortOrder(FileStorageUtils.SORT_NAME, descending);
+ }
+
+ public void sortByDate(boolean descending) {
+ mAdapter.setSortOrder(FileStorageUtils.SORT_DATE, descending);
+ }
+
+ public void sortBySize(boolean descending) {
+ mAdapter.setSortOrder(FileStorageUtils.SORT_SIZE, descending);
+ }
+
+
/**
* Interface to implement by any Activity that includes some instance of LocalFileListFragment
*/
*/
package com.owncloud.android.ui.fragment;
-import java.io.File;
-
+import android.accounts.Account;
import android.app.Activity;
+import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.net.Uri;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.support.v4.widget.SwipeRefreshLayout;
+import android.view.ActionMode;
+import android.support.v7.app.AlertDialog;
import android.view.ContextMenu;
+import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.PopupMenu;
+import android.widget.TextView;
+import android.widget.Toast;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.files.FileMenuFilter;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import com.owncloud.android.media.MediaService;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.activity.FolderPickerActivity;
import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
+import com.owncloud.android.ui.activity.UploadFilesActivity;
import com.owncloud.android.ui.adapter.FileListListAdapter;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
+import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
+import com.owncloud.android.ui.dialog.FileActionsDialogFragment;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
+import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment;
import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
+import com.owncloud.android.ui.dialog.UploadSourceDialogFragment;
import com.owncloud.android.ui.preview.PreviewImageFragment;
import com.owncloud.android.ui.preview.PreviewMediaFragment;
+import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.ExceptionHandler;
+import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.ui.preview.PreviewTextFragment;
import com.owncloud.android.utils.FileStorageUtils;
+import java.io.File;
+import java.util.ArrayList;
+
/**
* A Fragment that lists all files and folders in a given path.
- *
+ *
* TODO refactor to get rid of direct dependency on FileDisplayActivity
*/
public class OCFileListFragment extends ExtendedListFragment {
private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ?
OCFileListFragment.class.getPackage().getName() : "com.owncloud.android.ui.fragment";
-
+
public final static String ARG_JUST_FOLDERS = MY_PACKAGE + ".JUST_FOLDERS";
public final static String ARG_ALLOW_CONTEXTUAL_ACTIONS = MY_PACKAGE + ".ALLOW_CONTEXTUAL";
-
+ public final static String ARG_HIDE_FAB = MY_PACKAGE + ".HIDE_FAB";
+
private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
+ private static final String KEY_FAB_EVER_CLICKED = "FAB_EVER_CLICKED";
+
+ private static String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER";
private FileFragment.ContainerActivity mContainerActivity;
-
+
private OCFile mFile = null;
private FileListListAdapter mAdapter;
private boolean mJustFolders;
private OCFile mTargetFile;
-
-
+
+ private boolean miniFabClicked = false;
/**
* {@inheritDoc}
Log_OC.e(TAG, "onAttach");
try {
mContainerActivity = (FileFragment.ContainerActivity) activity;
-
+
} catch (ClassCastException e) {
- throw new ClassCastException(activity.toString() + " must implement " +
+ throw new ClassCastException(activity.toString() + " must implement " +
FileFragment.ContainerActivity.class.getSimpleName());
}
try {
setOnRefreshListener((OnEnforceableRefreshListener) activity);
} catch (ClassCastException e) {
- throw new ClassCastException(activity.toString() + " must implement " +
+ throw new ClassCastException(activity.toString() + " must implement " +
SwipeRefreshLayout.OnRefreshListener.class.getSimpleName());
}
}
-
+
@Override
public void onDetach() {
setOnRefreshListener(null);
mJustFolders,
getActivity(),
mContainerActivity
- );
+ );
setListAdapter(mAdapter);
- registerForContextMenu();
+ registerLongClickListener();
+
+ boolean hideFab = (args != null) && args.getBoolean(ARG_HIDE_FAB, false);
+ if (hideFab) {
+ setFabEnabled(false);
+ } else {
+ setFabEnabled(true);
+ registerFabListeners();
+
+ // detect if a mini FAB has ever been clicked
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
+ if(prefs.getLong(KEY_FAB_EVER_CLICKED, 0) > 0) {
+ miniFabClicked = true;
+ }
+
+ // add labels to the min FABs when none of them has ever been clicked on
+ if(!miniFabClicked) {
+ setFabLabels();
+ } else {
+ removeFabLabels();
+ }
+ }
}
/**
+ * adds labels to all mini FABs.
+ */
+ private void setFabLabels() {
+ getFabUpload().setTitle(getResources().getString(R.string.actionbar_upload));
+ getFabMkdir().setTitle(getResources().getString(R.string.actionbar_mkdir));
+ getFabUploadFromApp().setTitle(getResources().getString(R.string.actionbar_upload_from_apps));
+ }
+
+ /**
+ * registers all listeners on all mini FABs.
+ */
+ private void registerFabListeners() {
+ registerFabUploadListeners();
+ registerFabMkDirListeners();
+ registerFabUploadFromAppListeners();
+ }
+
+ /**
+ * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
+ * on the Upload mini FAB for the linked action and {@link Toast} showing the underlying action.
+ */
+ private void registerFabUploadListeners() {
+ getFabUpload().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent action = new Intent(getActivity(), UploadFilesActivity.class);
+ action.putExtra(
+ UploadFilesActivity.EXTRA_ACCOUNT,
+ ((FileActivity) getActivity()).getAccount()
+ );
+ getActivity().startActivityForResult(action, UploadSourceDialogFragment.ACTION_SELECT_MULTIPLE_FILES);
+ getFabMain().collapse();
+ recordMiniFabClick();
+ }
+ });
+
+ getFabUpload().setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ Toast.makeText(getActivity(), R.string.actionbar_upload, Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ });
+ }
+
+ /**
+ * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
+ * on the 'Create Dir' mini FAB for the linked action and {@link Toast} showing the underlying action.
+ */
+ private void registerFabMkDirListeners() {
+ getFabMkdir().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ CreateFolderDialogFragment dialog =
+ CreateFolderDialogFragment.newInstance(mFile);
+ dialog.show(getActivity().getSupportFragmentManager(), FileDisplayActivity.DIALOG_CREATE_FOLDER);
+ getFabMain().collapse();
+ recordMiniFabClick();
+ }
+ });
+
+ getFabMkdir().setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ Toast.makeText(getActivity(), R.string.actionbar_mkdir, Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ });
+ }
+
+ /**
+ * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
+ * on the Upload from App mini FAB for the linked action and {@link Toast} showing the underlying action.
+ */
+ private void registerFabUploadFromAppListeners() {
+ getFabUploadFromApp().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent action = new Intent(Intent.ACTION_GET_CONTENT);
+ action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
+
+ //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
+ }
+
+ getActivity().startActivityForResult(
+ Intent.createChooser(action, getString(R.string.upload_chooser_title)),
+ UploadSourceDialogFragment.ACTION_SELECT_CONTENT_FROM_APPS
+ );
+ getFabMain().collapse();
+ recordMiniFabClick();
+ }
+ });
+
+ getFabUploadFromApp().setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ Toast.makeText(getActivity(),
+ R.string.actionbar_upload_from_apps,
+ Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ });
+ }
+
+ /**
+ * records a click on a mini FAB and thus:
+ * <ol>
+ * <li>persists the click fact</li>
+ * <li>removes the mini FAB labels</li>
+ * </ol>
+ */
+ private void recordMiniFabClick() {
+ // only record if it hasn't been done already at some other time
+ if(!miniFabClicked) {
+ final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
+ sp.edit().putLong(KEY_FAB_EVER_CLICKED, 1).commit();
+ miniFabClicked = true;
+ }
+ }
+
+ /**
+ * removes the labels on all known min FABs.
+ */
+ private void removeFabLabels() {
+ getFabUpload().setTitle(null);
+ getFabMkdir().setTitle(null);
+ getFabUploadFromApp().setTitle(null);
+ ((TextView) getFabUpload().getTag(com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
+ ((TextView) getFabMkdir().getTag(com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
+ ((TextView) getFabUploadFromApp().getTag(com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
+ }
+
+ private void registerLongClickListener() {
+ getListView().setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
+ private Menu menu;
+
+ @Override
+ public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
+ final int checkedCount = getListView().getCheckedItemCount();
+ // TODO Tobi extract to values
+ mode.setTitle(checkedCount + " selected");
+
+ if (checked) {
+ mAdapter.setNewSelection(position, checked);
+ } else {
+ mAdapter.removeSelection(position);
+ }
+
+ // TODO maybe change: only recreate menu if count changes
+ menu.clear();
+ if (checkedCount == 1) {
+ createContextMenu(menu);
+ } else {
+ // download, move, copy, delete
+ getActivity().getMenuInflater().inflate(R.menu.multiple_file_actions_menu, menu);
+ }
+
+ }
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ this.menu = menu;
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ return onFileActionChosen(item.getItemId());
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ mAdapter.removeSelection();
+ }
+ });
+ }
+
+
+ private void showFileAction(int fileIndex) {
+ Bundle args = getArguments();
+ PopupMenu pm = new PopupMenu(getActivity(),null);
+ Menu menu = pm.getMenu();
+
+ boolean allowContextualActions =
+ (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
+
+ if (allowContextualActions) {
+ MenuInflater inflater = getActivity().getMenuInflater();
+
+ inflater.inflate(R.menu.file_actions_menu, menu);
+ OCFile targetFile = (OCFile) mAdapter.getItem(fileIndex);
+
+ if (mContainerActivity.getStorageManager() != null) {
+ FileMenuFilter mf = new FileMenuFilter(
+ targetFile,
+ mContainerActivity.getStorageManager().getAccount(),
+ mContainerActivity,
+ getActivity()
+ );
+ mf.filter(menu);
+ }
+
+ /// TODO break this direct dependency on FileDisplayActivity... if possible
+ MenuItem item = menu.findItem(R.id.action_open_file_with);
+ FileFragment frag = ((FileDisplayActivity)getActivity()).getSecondFragment();
+ if (frag != null && frag instanceof FileDetailFragment &&
+ frag.getFile().getFileId() == targetFile.getFileId()) {
+ item = menu.findItem(R.id.action_see_details);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+ }
+
+ FileActionsDialogFragment dialog = FileActionsDialogFragment.newInstance(menu,
+ fileIndex, targetFile.getFileName());
+ dialog.setTargetFragment(this, 0);
+ dialog.show(getFragmentManager(), FileActionsDialogFragment.FTAG_FILE_ACTIONS);
+ }
+ }
+
+ /**
* Saves the current listed folder.
*/
@Override
- public void onSaveInstanceState (Bundle outState) {
+ public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(KEY_FILE, mFile);
}
-
+
/**
* Call this, when the user presses the up button.
- *
- * Tries to move up the current folder one level. If the parent folder was removed from the
- * database, it continues browsing up until finding an existing folders.
- *
- * return Count of folder levels browsed up.
+ * <p>
+ * Tries to move up the current folder one level. If the parent folder was removed from the
+ * database, it continues browsing up until finding an existing folders.
+ * </p>
+ * @return Count of folder levels browsed up.
*/
public int onBrowseUp() {
OCFile parentDir = null;
int moveCount = 0;
-
- if(mFile != null){
+
+ if (mFile != null) {
FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
-
+
String parentPath = null;
if (mFile.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) {
parentPath = new File(mFile.getRemotePath()).getParent();
- parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :
- parentPath + OCFile.PATH_SEPARATOR;
+ parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :
+ parentPath + OCFile.PATH_SEPARATOR;
parentDir = storageManager.getFileByPath(parentPath);
moveCount++;
} else {
}
while (parentDir == null) {
parentPath = new File(parentPath).getParent();
- parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :
- parentPath + OCFile.PATH_SEPARATOR;
+ parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :
+ parentPath + OCFile.PATH_SEPARATOR;
parentDir = storageManager.getFileByPath(parentPath);
moveCount++;
} // exit is granted because storageManager.getFileByPath("/") never returns null
mFile = parentDir;
- // TODO Enable when "On Device" is recovered ?
- listDirectory(mFile /*, MainApp.getOnlyOnDevice()*/);
+ listDirectory(mFile, MainApp.getOnlyOnDevice());
onRefresh(false);
-
+
// restore index and top position
restoreIndexAndTopPosition();
-
+
} // else - should never happen now
-
+
return moveCount;
}
-
+
@Override
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
OCFile file = (OCFile) mAdapter.getItem(position);
if (file != null) {
- if (file.isFolder()) {
+ if (file.isFolder()) {
// update state and view of this fragment
- // TODO Enable when "On Device" is recovered ?
- listDirectory(file/*, MainApp.getOnlyOnDevice()*/);
+ listDirectory(file, MainApp.getOnlyOnDevice());
// then, notify parent activity to let it update its state and view
mContainerActivity.onBrowsedDownTo(file);
// save index and top position
saveIndexAndTopPosition(position);
-
+
} else { /// Click on a file
if (PreviewImageFragment.canBePreviewed(file)) {
// preview image - it handles the download, if needed
((FileDisplayActivity)mContainerActivity).startImagePreview(file);
-
- } else if (file.isDown()) {
- if (PreviewMediaFragment.canBePreviewed(file)) {
+ } else if (PreviewTextFragment.canBePreviewed(file)){
+ ((FileDisplayActivity)mContainerActivity).startTextPreview(file);
+ } else if (PreviewMediaFragment.canBePreviewed(file)) {
// media preview
- ((FileDisplayActivity)mContainerActivity).startMediaPreview(file, 0, true);
- } else {
+ ((FileDisplayActivity) mContainerActivity).startMediaPreview(file, 0, true);
+ } else if (file.isDown()) {
mContainerActivity.getFileOperationsHelper().openFile(file);
- }
-
} else {
// automatic download, preview on finish
- ((FileDisplayActivity)mContainerActivity).startDownloadForPreview(file);
+ ((FileDisplayActivity) mContainerActivity).startDownloadForPreview(file);
}
-
}
-
} else {
Log_OC.d(TAG, "Null object in ListAdapter!!");
}
-
}
-
+
/**
* {@inheritDoc}
*/
- @Override
- public void onCreateContextMenu (
- ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
+ // TODO Tobi needed?
+ public void createContextMenu(Menu menu) {
Bundle args = getArguments();
- boolean allowContextualActions =
- (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
+ boolean allowContextualActions =
+ (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
if (allowContextualActions) {
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.file_actions_menu, menu);
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
- OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
-
+ OCFile targetFile = null;
+ if (mAdapter.getCheckedItems().size() == 1){
+ targetFile = mAdapter.getCheckedItems().get(0);
+ }
+
if (mContainerActivity.getStorageManager() != null) {
FileMenuFilter mf = new FileMenuFilter(
targetFile,
item.setEnabled(false);
}
}
+
+// String.format(mContext.getString(R.string.subject_token),
+// getClient().getCredentials().getUsername(), file.getFileName()));
+ }
+ }
+
+ public boolean onFileActionChosen(int menuId) {
+ if (mAdapter.getCheckedItems().size() == 1){
+ OCFile mTargetFile = mAdapter.getCheckedItems().get(0);
+
+ switch (menuId) {
+ case R.id.action_share_file: {
+ mContainerActivity.getFileOperationsHelper().showShareFile(mTargetFile);
+ return true;
+ }
+ case R.id.action_open_file_with: {
+ mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
+ return true;
+ }
+ case R.id.action_rename_file: {
+ RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
+ dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
+ return true;
+ }
+ case R.id.action_remove_file: {
+ RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
+ dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
+ return true;
+ }
+ case R.id.action_download_file:
+ case R.id.action_sync_file: {
+ mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
+ return true;
+ }
+ case R.id.action_cancel_sync: {
+ ((FileDisplayActivity) mContainerActivity).cancelTransference(mTargetFile);
+ return true;
+ }
+ case R.id.action_see_details: {
+ mContainerActivity.showDetails(mTargetFile);
+ return true;
+ }
+ case R.id.action_send_file: {
+ // Obtain the file
+ if (!mTargetFile.isDown()) { // Download the file
+ Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
+ ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile);
+ return true;
+ } else {
+ mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
+ }
+ }
+ case R.id.action_stream_file: {
+ Account account = ((FileActivity)mContainerActivity).getAccount();
+ Context context = MainApp.getAppContext();
+ String uri = PreviewMediaFragment.generateUrlWithCredentials(account, context, mTargetFile);
+ MediaService.streamWithExternalApp(uri, getActivity()).show();
+ return true;
+ }
+ case R.id.action_move: {
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
+ ArrayList files = new ArrayList();
+ files.add(mTargetFile);
+ action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, files);
+ getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
+ return true;
+ }
+ case R.id.action_favorite_file: {
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, true);
+ return true;
+ }
+ case R.id.action_unfavorite_file: {
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false);
+ return true;
+ }
+ case R.id.action_copy:
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
+ ArrayList files = new ArrayList();
+ files.add(mTargetFile);
+ action.putExtra(FolderPickerActivity.EXTRA_FILES, files);
+ getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES);
+ return true;
+ default:
+ return false;
+ }
+ } else {
+ ArrayList<OCFile> mTargetFiles = mAdapter.getCheckedItems();
+
+ switch (menuId) {
+ case R.id.action_remove_file: {
+ RemoveFilesDialogFragment dialog = RemoveFilesDialogFragment.newInstance(mTargetFiles);
+ dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
+ return true;
+ }
+ case R.id.action_download_file:
+ case R.id.action_sync_file: {
+ mContainerActivity.getFileOperationsHelper().syncFiles(mTargetFiles);
+ return true;
+ }
+ case R.id.action_move: {
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
+ action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, mTargetFiles);
+ getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
+ return true;
+ }
+ case R.id.action_favorite_file: {
+ mContainerActivity.getFileOperationsHelper().toggleFavorites(mTargetFiles, true);
+ return true;
+ }
+ case R.id.action_unfavorite_file: {
+ mContainerActivity.getFileOperationsHelper().toggleFavorites(mTargetFiles, false);
+ return true;
+ }
+ case R.id.action_copy:
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
+ action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, mTargetFiles);
+ getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES);
+ return true;
+ default:
+ return false;
+ }
}
}
-
/**
* {@inhericDoc}
*/
@Override
public boolean onContextItemSelected (MenuItem item) {
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
- mTargetFile = (OCFile) mAdapter.getItem(info.position);
- switch (item.getItemId()) {
- case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLink(mTargetFile);
- return true;
- }
- case R.id.action_open_file_with: {
- mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
- return true;
- }
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileWithLink(mTargetFile);
- return true;
- }
- case R.id.action_rename_file: {
- RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
- dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
- return true;
- }
- case R.id.action_remove_file: {
- RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
- dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
- return true;
- }
- case R.id.action_download_file:
- case R.id.action_sync_file: {
- mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
- return true;
- }
- case R.id.action_cancel_download:
- case R.id.action_cancel_upload: {
- ((FileDisplayActivity)mContainerActivity).cancelTransference(mTargetFile);
- return true;
- }
- case R.id.action_see_details: {
- mContainerActivity.showDetails(mTargetFile);
- return true;
- }
- case R.id.action_send_file: {
- // Obtain the file
- if (!mTargetFile.isDown()) { // Download the file
- Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
- ((FileDisplayActivity)mContainerActivity).startDownloadForSending(mTargetFile);
-
- } else {
- mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
- }
- return true;
- }
- case R.id.action_move: {
- Intent action = new Intent(getActivity(), FolderPickerActivity.class);
-
- // Pass mTargetFile that contains info of selected file/folder
- action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
- getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
- return true;
- }
- case R.id.action_favorite_file:{
- mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, true);
- return true;
- }
- case R.id.action_unfavorite_file:{
- mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false);
- return true;
- }
- default:
- return super.onContextItemSelected(item);
+ AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
+ boolean matched = onFileActionChosen(item.getItemId()) ;
+ if(!matched) {
+ return super.onContextItemSelected(item);
+ } else {
+ return matched;
}
}
/**
* Use this to query the {@link OCFile} that is currently
* being displayed by this fragment
+ *
* @return The currently viewed OCFile
*/
- public OCFile getCurrentFile(){
+ public OCFile getCurrentFile() {
return mFile;
}
-
+
/**
- * Calls {@link OCFileListFragment#listDirectory(OCFile)} with a null parameter
+ * Calls {@link OCFileListFragment#listDirectory(OCFile, boolean)} with a null parameter
*/
- public void listDirectory(/*boolean onlyOnDevice*/){
- listDirectory(null);
- // TODO Enable when "On Device" is recovered ?
- // listDirectory(null, onlyOnDevice);
+ public void listDirectory(boolean onlyOnDevice){
+ listDirectory(null, onlyOnDevice);
}
public void refreshDirectory(){
- // TODO Enable when "On Device" is recovered ?
- listDirectory(getCurrentFile()/*, MainApp.getOnlyOnDevice()*/);
+ listDirectory(getCurrentFile(), MainApp.getOnlyOnDevice());
}
-
+
/**
* Lists the given directory on the view. When the input parameter is null,
* it will either refresh the last known directory. list the root
* if there never was a directory.
- *
+ *
* @param directory File to be listed
*/
- public void listDirectory(OCFile directory/*, boolean onlyOnDevice*/) {
+ public void listDirectory(OCFile directory, boolean onlyOnDevice) {
FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
if (storageManager != null) {
// Check input parameters for null
- if(directory == null){
- if(mFile != null){
+ if (directory == null) {
+ if (mFile != null) {
directory = mFile;
} else {
directory = storageManager.getFileByPath("/");
if (directory == null) return; // no files, wait for sync
}
}
-
-
+
+
// If that's not a directory -> List its parent
- if(!directory.isFolder()){
+ if (!directory.isFolder()) {
Log_OC.w(TAG, "You see, that is not a directory -> " + directory.toString());
directory = storageManager.getFileById(directory.getParentId());
}
- // TODO Enable when "On Device" is recovered ?
- mAdapter.swapDirectory(directory, storageManager/*, onlyOnDevice*/);
+ mAdapter.swapDirectory(directory, storageManager, onlyOnDevice);
if (mFile == null || !mFile.equals(directory)) {
mCurrentListView.setSelection(0);
}
if (file.isFolder()) {
foldersCount++;
} else {
- filesCount++;
- if (file.isImage() || file.isVideo()){
- imagesCount++;
+ if (!file.isHidden()) {
+ filesCount++;
+
+ if (file.isImage() || file.isVideo()) {
+ imagesCount++;
+ }
}
}
}
OwnCloudVersion version = AccountUtils.getServerVersion(
((FileActivity)mContainerActivity).getAccount());
if (version != null && version.supportsRemoteThumbnails() &&
- imagesCount > 0 && imagesCount == filesCount) {
+ DisplayUtils.isGridView(mFile, mContainerActivity.getStorageManager())) {
switchToGridView();
+ registerLongClickListener();
} else {
switchToListView();
// switchToGridView();
return output;
}
-
public void sortByName(boolean descending) {
mAdapter.setSortOrder(FileStorageUtils.SORT_NAME, descending);
}
public void sortBySize(boolean descending) {
mAdapter.setSortOrder(FileStorageUtils.SORT_SIZE, descending);
}
-
-
}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.fragment;
+
+import android.accounts.Account;
+import android.app.Activity;
+import android.app.SearchManager;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.ListView;
+import android.widget.SearchView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.activity.ShareActivity;
+import com.owncloud.android.ui.adapter.ShareUserListAdapter;
+
+import java.util.ArrayList;
+
+/**
+ * Fragment for Searching sharees (users and groups)
+ *
+ * A simple {@link Fragment} subclass.
+ *
+ * Activities that contain this fragment must implement the
+ * {@link SearchShareesFragment.OnSearchFragmentInteractionListener} interface
+ * to handle interaction events.
+ *
+ * Use the {@link SearchShareesFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class SearchShareesFragment extends Fragment implements ShareUserListAdapter.ShareUserAdapterListener {
+ private static final String TAG = SearchShareesFragment.class.getSimpleName();
+
+ // the fragment initialization parameters
+ private static final String ARG_FILE = "FILE";
+ private static final String ARG_ACCOUNT = "ACCOUNT";
+
+ // Parameters
+ private OCFile mFile;
+ private Account mAccount;
+
+ // other members
+ private ArrayList<OCShare> mShares;
+ private ShareUserListAdapter mUserGroupsAdapter = null;
+ private OnSearchFragmentInteractionListener mListener;
+
+
+ /**
+ * Public factory method to create new SearchShareesFragment instances.
+ *
+ * @param fileToShare An {@link OCFile} to be shared
+ * @param account The ownCloud account containing fileToShare
+ * @return A new instance of fragment SearchShareesFragment.
+ */
+ public static SearchShareesFragment newInstance(OCFile fileToShare, Account account) {
+ SearchShareesFragment fragment = new SearchShareesFragment();
+ Bundle args = new Bundle();
+ args.putParcelable(ARG_FILE, fileToShare);
+ args.putParcelable(ARG_ACCOUNT, account);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public SearchShareesFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mFile = getArguments().getParcelable(ARG_FILE);
+ mAccount = getArguments().getParcelable(ARG_ACCOUNT);
+ }
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.search_users_groups_layout, container, false);
+
+ // Get the SearchView and set the searchable configuration
+ SearchView searchView = (SearchView) view.findViewById(R.id.searchView);
+ SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
+ searchView.setSearchableInfo(searchManager.getSearchableInfo(
+ getActivity().getComponentName()) // assumes parent activity is the searchable activity
+ );
+ searchView.setIconifiedByDefault(false); // do not iconify the widget; expand it by default
+
+ searchView.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); // avoid fullscreen with softkeyboard
+
+ searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ Log_OC.v(TAG, "onQueryTextSubmit intercepted, query: " + query);
+ return true; // return true to prevent the query is processed to be queried;
+ // a user / group will be picked only if selected in the list of suggestions
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ return false; // let it for the parent listener in the hierarchy / default behaviour
+ }
+ });
+
+ return view;
+ }
+
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ // Load data into the list
+ refreshUsersOrGroupsListFromDB();
+ }
+
+
+ /**
+ * Get users and groups from the DB to fill in the "share with" list
+ *
+ * Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
+ * instance ready to use. If not ready, does nothing.
+ */
+ public void refreshUsersOrGroupsListFromDB (){
+ // Get Users and Groups
+ if (((FileActivity) mListener).getStorageManager() != null) {
+ mShares = ((FileActivity) mListener).getStorageManager().getSharesWithForAFile(
+ mFile.getRemotePath(),
+ mAccount.name
+ );
+
+ // Update list of users/groups
+ updateListOfUserGroups();
+ }
+ }
+
+ private void updateListOfUserGroups() {
+ // Update list of users/groups
+ // TODO Refactoring: create a new {@link ShareUserListAdapter} instance with every call should not be needed
+ mUserGroupsAdapter = new ShareUserListAdapter(
+ getActivity().getApplicationContext(),
+ R.layout.share_user_item, mShares, this
+ );
+
+ // Show data
+ ListView usersList = (ListView) getView().findViewById(R.id.searchUsersListView);
+
+ if (mShares.size() > 0) {
+ usersList.setVisibility(View.VISIBLE);
+ usersList.setAdapter(mUserGroupsAdapter);
+
+ } else {
+ usersList.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnSearchFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ // focus the search view and request the software keyboard be shown
+ View searchView = getView().findViewById(R.id.searchView);
+ if (searchView.requestFocus()) {
+ InputMethodManager imm = (InputMethodManager)
+ getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ imm.showSoftInput(searchView.findFocus(), InputMethodManager.SHOW_IMPLICIT);
+ }
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ @Override
+ public void unshareButtonPressed(OCShare share) {
+ // Unshare
+ mListener.unshareWith(share);
+ Log_OC.d(TAG, "Unshare - " + share.getSharedWithDisplayName());
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ * <p/>
+ * See the Android Training lesson <a href=
+ * "http://developer.android.com/training/basics/fragments/communicating.html"
+ * >Communicating with Other Fragments</a> for more information.
+ */
+ public interface OnSearchFragmentInteractionListener {
+ void unshareWith(OCShare share);
+ }
+
+}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * @author David A. Velasco
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.ui.fragment;
+
+import android.accounts.Account;
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.AppCompatButton;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+import android.widget.ScrollView;
+import android.widget.Switch;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.lib.resources.status.OCCapability;
+import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.adapter.ShareUserListAdapter;
+import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
+import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.MimetypeIconUtil;
+
+import java.text.SimpleDateFormat;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+/**
+ * Fragment for Sharing a file with sharees (users or groups) or creating
+ * a public link.
+ *
+ * A simple {@link Fragment} subclass.
+ *
+ * Activities that contain this fragment must implement the
+ * {@link ShareFileFragment.OnShareFragmentInteractionListener} interface
+ * to handle interaction events.
+ *
+ * Use the {@link ShareFileFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class ShareFileFragment extends Fragment
+ implements ShareUserListAdapter.ShareUserAdapterListener{
+
+ private static final String TAG = ShareFileFragment.class.getSimpleName();
+
+ /** The fragment initialization parameters */
+ private static final String ARG_FILE = "FILE";
+ private static final String ARG_ACCOUNT = "ACCOUNT";
+
+// /** Tag for dialog */
+// private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG";
+
+ /** File to share, received as a parameter in construction time */
+ private OCFile mFile;
+
+ /** OC account holding the file to share, received as a parameter in construction time */
+ private Account mAccount;
+
+ /** Reference to parent listener */
+ private OnShareFragmentInteractionListener mListener;
+
+ /** List of private shares bound to the file */
+ private ArrayList<OCShare> mPrivateShares;
+
+ /** Capabilities of the server */
+ private OCCapability mCapabilities;
+
+ /** Adapter to show private shares */
+ private ShareUserListAdapter mUserGroupsAdapter = null;
+
+ /** Public share bound to the file */
+ private OCShare mPublicShare;
+
+ /** Listener for changes on switch to share / unshare publicly */
+ private CompoundButton.OnCheckedChangeListener mOnShareViaLinkSwitchCheckedChangeListener;
+
+ /**
+ * Listener for user actions to set, update or clear password on public link
+ */
+ private OnPasswordInteractionListener mOnPasswordInteractionListener = null;
+
+ /**
+ * Listener for user actions to set, update or clear expiration date on public link
+ */
+ private OnExpirationDateInteractionListener mOnExpirationDateInteractionListener = null;
+
+
+ /**
+ * Public factory method to create new ShareFileFragment instances.
+ *
+ * @param fileToShare An {@link OCFile} to show in the fragment
+ * @param account An ownCloud account
+ * @return A new instance of fragment ShareFileFragment.
+ */
+ public static ShareFileFragment newInstance(OCFile fileToShare, Account account) {
+ ShareFileFragment fragment = new ShareFileFragment();
+ Bundle args = new Bundle();
+ args.putParcelable(ARG_FILE, fileToShare);
+ args.putParcelable(ARG_ACCOUNT, account);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public ShareFileFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Log_OC.d(TAG, "onCreate");
+ if (getArguments() != null) {
+ mFile = getArguments().getParcelable(ARG_FILE);
+ mAccount = getArguments().getParcelable(ARG_ACCOUNT);
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ Log_OC.d(TAG, "onCreateView");
+
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.share_file_layout, container, false);
+
+ // Setup layout
+ // Image
+ ImageView icon = (ImageView) view.findViewById(R.id.shareFileIcon);
+ icon.setImageResource(MimetypeIconUtil.getFileTypeIconId(mFile.getMimetype(),
+ mFile.getFileName()));
+ if (mFile.isImage()) {
+ String remoteId = String.valueOf(mFile.getRemoteId());
+ Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(remoteId);
+ if (thumbnail != null) {
+ icon.setImageBitmap(thumbnail);
+ }
+ }
+ // Name
+ TextView filename = (TextView) view.findViewById(R.id.shareFileName);
+ filename.setText(mFile.getFileName());
+ // Size
+ TextView size = (TextView) view.findViewById(R.id.shareFileSize);
+ if (mFile.isFolder()) {
+ size.setVisibility(View.GONE);
+ } else {
+ size.setText(DisplayUtils.bytesToHumanReadable(mFile.getFileLength()));
+ }
+
+ // Add User Button
+ Button addUserGroupButton = (Button)
+ view.findViewById(R.id.addUserButton);
+ addUserGroupButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ boolean shareWithUsersEnable = AccountUtils.hasSearchUsersSupport(mAccount);
+ if (shareWithUsersEnable) {
+ // Show Search Fragment
+ mListener.showSearchUsersAndGroups();
+ } else {
+ String message = getString(R.string.share_sharee_unavailable);
+ Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show();
+ }
+ }
+ });
+
+ // Switch to create public share
+ mOnShareViaLinkSwitchCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton switchView, boolean isChecked) {
+ }
+ };
+
+ // Set listener for user actions on switch for sharing/unsharing via link
+ initShareViaLinkListener(view);
+
+ // Set listener for user actions on expiration date
+ initExpirationListener(view);
+
+ // Set listener for user actions on password
+ initPasswordListener(view);
+
+ return view;
+ }
+
+
+ /**
+ * Binds listener for user actions to create or delete a public share
+ * to the views receiving the user events.
+ *
+ * @param shareView Root view in the fragment.
+ */
+ private void initShareViaLinkListener(View shareView) {
+ mOnShareViaLinkSwitchCheckedChangeListener = new OnShareViaLinkListener();
+ Switch shareViaLinkSwitch = (Switch) shareView.findViewById(R.id.shareViaLinkSectionSwitch);
+ shareViaLinkSwitch.setOnCheckedChangeListener(mOnShareViaLinkSwitchCheckedChangeListener);
+ }
+
+ /**
+ * Listener for user actions that create or delete a public share.
+ */
+ private class OnShareViaLinkListener
+ implements CompoundButton.OnCheckedChangeListener {
+
+ /**
+ * Called by R.id.shareViaLinkSectionSwitch to create or delete a public link.
+ *
+ * @param switchView {@link Switch} toggled by the user, R.id.shareViaLinkSectionSwitch
+ * @param isChecked New switch state.
+ */
+ @Override
+ public void onCheckedChanged(CompoundButton switchView, boolean isChecked) {
+ if (!isResumed()) {
+ // very important, setCheched(...) is called automatically during
+ // Fragment recreation on device rotations
+ return;
+ }
+ if (isChecked) {
+ if (mCapabilities != null &&
+ mCapabilities.getFilesSharingPublicPasswordEnforced().isTrue()) {
+ // password enforced by server, request to the user before trying to create
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ requestPasswordForShareViaLink(mFile, true);
+
+ } else {
+ // create without password if not enforced by server or we don't know if enforced;
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ shareFileViaLink(mFile, null);
+
+ // FileActivtiy#onCreateShareViaLinkOperationFinish still handles the guess of enforcement
+ // for server in versions previous to OwnCloudVersion#MINIMUM_VERSION_CAPABILITIES_API
+ }
+
+ } else {
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ unshareFileViaLink(mFile);
+ }
+
+ // undo the toggle to grant the view will be correct if any intermediate dialog is cancelled or
+ // the create/delete operation fails
+ switchView.setOnCheckedChangeListener(null);
+ switchView.toggle();
+ switchView.setOnCheckedChangeListener(mOnShareViaLinkSwitchCheckedChangeListener);
+ }
+ }
+
+
+ /**
+ * Binds listener for user actions that start any update on a expiration date
+ * for the public link to the views receiving the user events.
+ *
+ * @param shareView Root view in the fragment.
+ */
+ private void initExpirationListener(View shareView) {
+ mOnExpirationDateInteractionListener = new OnExpirationDateInteractionListener();
+
+ ((Switch) shareView.findViewById(R.id.shareViaLinkExpirationSwitch)).
+ setOnCheckedChangeListener(mOnExpirationDateInteractionListener);
+
+ shareView.findViewById(R.id.shareViaLinkExpirationLabel).
+ setOnClickListener(mOnExpirationDateInteractionListener);
+
+ shareView.findViewById(R.id.shareViaLinkExpirationValue).
+ setOnClickListener(mOnExpirationDateInteractionListener);
+ }
+
+ /**
+ * Listener for user actions that start any update on the expiration date for the public link.
+ */
+ private class OnExpirationDateInteractionListener
+ implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {
+
+ /**
+ * Called by R.id.shareViaLinkExpirationSwitch to set or clear the expiration date.
+ *
+ * @param switchView {@link Switch} toggled by the user, R.id.shareViaLinkExpirationSwitch
+ * @param isChecked New switch state.
+ */
+ @Override
+ public void onCheckedChanged(CompoundButton switchView, boolean isChecked) {
+ if (!isResumed()) {
+ // very important, setCheched(...) is called automatically during
+ // Fragment recreation on device rotations
+ return;
+ }
+ if (isChecked) {
+ ExpirationDatePickerDialogFragment dialog =
+ ExpirationDatePickerDialogFragment.newInstance(mFile, -1);
+ dialog.show(
+ getActivity().getSupportFragmentManager(),
+ ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG
+ );
+
+ } else {
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ setExpirationDateToShareViaLink(mFile, -1);
+ }
+
+ // undo the toggle to grant the view will be correct if the dialog is cancelled
+ switchView.setOnCheckedChangeListener(null);
+ switchView.toggle();
+ switchView.setOnCheckedChangeListener(mOnExpirationDateInteractionListener);
+ }
+
+ /**
+ * Called by R.id.shareViaLinkExpirationLabel or R.id.shareViaLinkExpirationValue
+ * to change the current expiration date.
+ *
+ * @param expirationView Label or value view touched by the user.
+ */
+ @Override
+ public void onClick(View expirationView) {
+ if (mPublicShare != null && mPublicShare.getExpirationDate() > 0) {
+ long chosenDateInMillis = -1;
+ if (mPublicShare != null) {
+ chosenDateInMillis = mPublicShare.getExpirationDate();
+ }
+ ExpirationDatePickerDialogFragment dialog =
+ ExpirationDatePickerDialogFragment.newInstance(
+ mFile,
+ chosenDateInMillis
+ );
+ dialog.show(
+ getActivity().getSupportFragmentManager(),
+ ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG
+ );
+ }
+ }
+ }
+
+
+ /**
+ * Binds listener for user actions that start any update on a password for the public link
+ * to the views receiving the user events.
+ *
+ * @param shareView Root view in the fragment.
+ */
+ private void initPasswordListener(View shareView) {
+ mOnPasswordInteractionListener = new OnPasswordInteractionListener();
+
+ ((Switch) shareView.findViewById(R.id.shareViaLinkPasswordSwitch)).
+ setOnCheckedChangeListener(mOnPasswordInteractionListener);
+
+ shareView.findViewById(R.id.shareViaLinkPasswordLabel).
+ setOnClickListener(mOnPasswordInteractionListener);
+
+ shareView.findViewById(R.id.shareViaLinkPasswordValue).
+ setOnClickListener(mOnPasswordInteractionListener);
+ }
+
+
+ /**
+ * Listener for user actions that start any update on a password for the public link.
+ */
+ private class OnPasswordInteractionListener
+ implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {
+
+ /**
+ * Called by R.id.shareViaLinkPasswordSwitch to set or clear the password.
+ *
+ * @param switchView {@link Switch} toggled by the user, R.id.shareViaLinkPasswordSwitch
+ * @param isChecked New switch state.
+ */
+ @Override
+ public void onCheckedChanged(CompoundButton switchView, boolean isChecked) {
+ if (!isResumed()) {
+ // very important, setCheched(...) is called automatically during
+ // Fragment recreation on device rotations
+ return;
+ }
+ if (isChecked) {
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ requestPasswordForShareViaLink(mFile, false);
+ } else {
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ setPasswordToShareViaLink(mFile, ""); // "" clears
+ }
+
+ // undo the toggle to grant the view will be correct if the dialog is cancelled
+ switchView.setOnCheckedChangeListener(null);
+ switchView.toggle();
+ switchView.setOnCheckedChangeListener(mOnPasswordInteractionListener);
+ }
+
+ /**
+ * Called by R.id.shareViaLinkPasswordLabel or R.id.shareViaLinkPasswordValue
+ * to change the current password.
+ *
+ * @param passwordView Label or value view touched by the user.
+ */
+ @Override
+ public void onClick(View passwordView) {
+ if (mPublicShare != null && mPublicShare.isPasswordProtected()) {
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ requestPasswordForShareViaLink(mFile, false);
+ }
+ }
+ }
+
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ Log_OC.d(TAG, "onActivityCreated");
+
+ // Load known capabilities of the server from DB
+ refreshCapabilitiesFromDB();
+
+ // Load data into the list of private shares
+ refreshUsersOrGroupsListFromDB();
+
+ // Load data of public share, if exists
+ refreshPublicShareFromDB();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnShareFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnShareFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+
+ /**
+ * Get known server capabilities from DB
+ *
+ * Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
+ * instance ready to use. If not ready, does nothing.
+ */
+ public void refreshCapabilitiesFromDB() {
+ if (((FileActivity)mListener).getStorageManager() != null) {
+ mCapabilities = ((FileActivity)mListener).getStorageManager().
+ getCapability(mAccount.name);
+ }
+ }
+
+
+ /**
+ * Get users and groups from the DB to fill in the "share with" list.
+ *
+ * Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
+ * instance ready to use. If not ready, does nothing.
+ */
+ public void refreshUsersOrGroupsListFromDB (){
+ if (((FileActivity) mListener).getStorageManager() != null) {
+ // Get Users and Groups
+ mPrivateShares = ((FileActivity) mListener).getStorageManager().getSharesWithForAFile(
+ mFile.getRemotePath(),
+ mAccount.name
+ );
+
+ // Update list of users/groups
+ updateListOfUserGroups();
+ }
+ }
+
+ private void updateListOfUserGroups() {
+ // Update list of users/groups
+ // TODO Refactoring: create a new {@link ShareUserListAdapter} instance with every call should not be needed
+ mUserGroupsAdapter = new ShareUserListAdapter(
+ getActivity(),
+ R.layout.share_user_item,
+ mPrivateShares,
+ this
+ );
+
+ // Show data
+ TextView noShares = (TextView) getView().findViewById(R.id.shareNoUsers);
+ ListView usersList = (ListView) getView().findViewById(R.id.shareUsersList);
+
+ if (mPrivateShares.size() > 0) {
+ noShares.setVisibility(View.GONE);
+ usersList.setVisibility(View.VISIBLE);
+ usersList.setAdapter(mUserGroupsAdapter);
+ setListViewHeightBasedOnChildren(usersList);
+ } else {
+ noShares.setVisibility(View.VISIBLE);
+ usersList.setVisibility(View.GONE);
+ }
+
+ // Set Scroll to initial position
+ ScrollView scrollView = (ScrollView) getView().findViewById(R.id.shareScroll);
+ scrollView.scrollTo(0, 0);
+ }
+
+ @Override
+ public void unshareButtonPressed(OCShare share) {
+ // Unshare
+ mListener.unshareWith(share);
+ Log_OC.d(TAG, "Unshare - " + share.getSharedWithDisplayName());
+ }
+
+
+
+ /**
+ * Get public link from the DB to fill in the "Share link" section in the UI.
+ *
+ * Takes into account server capabilities before reading database.
+ *
+ * Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
+ * instance ready to use. If not ready, does nothing.
+ */
+ public void refreshPublicShareFromDB() {
+ if (isPublicShareDisabled()) {
+ hidePublicShare();
+
+ } else if (((FileActivity) mListener).getStorageManager() != null) {
+ // Get public share
+ mPublicShare = ((FileActivity) mListener).getStorageManager().getFirstShareByPathAndType(
+ mFile.getRemotePath(),
+ ShareType.PUBLIC_LINK,
+ ""
+ );
+
+ // Update public share section
+ updatePublicShareSection();
+ }
+ }
+
+ /**
+ * @return 'True' when public share is disabled in the server
+ */
+ private boolean isPublicShareDisabled() {
+ return (mCapabilities != null &&
+ mCapabilities.getFilesSharingPublicEnabled().isFalse()
+ );
+ }
+
+ /**
+ * Updates in the UI the section about public share with the information in the current
+ * public share bound to mFile, if any
+ */
+ private void updatePublicShareSection() {
+ if (mPublicShare != null && ShareType.PUBLIC_LINK.equals(mPublicShare.getShareType())) {
+ /// public share bound -> expand section
+ Switch shareViaLinkSwitch = getShareViaLinkSwitch();
+ if (!shareViaLinkSwitch.isChecked()) {
+ // set null listener before setChecked() to prevent infinite loop of calls
+ shareViaLinkSwitch.setOnCheckedChangeListener(null);
+ shareViaLinkSwitch.setChecked(true);
+ shareViaLinkSwitch.setOnCheckedChangeListener(
+ mOnShareViaLinkSwitchCheckedChangeListener
+ );
+ }
+ getExpirationDateSection().setVisibility(View.VISIBLE);
+ getPasswordSection().setVisibility(View.VISIBLE);
+ // GetLink button
+ AppCompatButton getLinkButton = getGetLinkButton();
+ getLinkButton.setVisibility(View.VISIBLE);
+ getLinkButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //GetLink from the server and show ShareLinkToDialog
+ ((FileActivity) getActivity()).getFileOperationsHelper().
+ getFileWithLink(mFile);
+
+ }
+ });
+
+ /// update state of expiration date switch and message depending on expiration date
+ Switch expirationDateSwitch = getExpirationDateSwitch();
+ // set null listener before setChecked() to prevent infinite loop of calls
+ expirationDateSwitch.setOnCheckedChangeListener(null);
+ long expirationDate = mPublicShare.getExpirationDate();
+ if (expirationDate > 0) {
+ if (!expirationDateSwitch.isChecked()) {
+ expirationDateSwitch.toggle();
+ }
+ String formattedDate =
+ SimpleDateFormat.getDateInstance().format(
+ new Date(expirationDate)
+ );
+ getExpirationDateValue().setText(formattedDate);
+ } else {
+ if (expirationDateSwitch.isChecked()) {
+ expirationDateSwitch.toggle();
+ }
+ getExpirationDateValue().setText(R.string.empty);
+ }
+ // recover listener
+ expirationDateSwitch.setOnCheckedChangeListener(
+ mOnExpirationDateInteractionListener
+ );
+
+ /// update state of password switch and message depending on password protection
+ Switch passwordSwitch = getPasswordSwitch();
+ // set null listener before setChecked() to prevent infinite loop of calls
+ passwordSwitch.setOnCheckedChangeListener(null);
+ if (mPublicShare.isPasswordProtected()) {
+ if (!passwordSwitch.isChecked()) {
+ passwordSwitch.toggle();
+ }
+ getPasswordValue().setVisibility(View.VISIBLE);
+ } else {
+ if (passwordSwitch.isChecked()) {
+ passwordSwitch.toggle();
+ }
+ getPasswordValue().setVisibility(View.INVISIBLE);
+ }
+ // recover listener
+ passwordSwitch.setOnCheckedChangeListener(
+ mOnPasswordInteractionListener
+ );
+
+
+ } else {
+ /// no public share -> collapse section
+ Switch shareViaLinkSwitch = getShareViaLinkSwitch();
+ if (shareViaLinkSwitch.isChecked()) {
+ shareViaLinkSwitch.setOnCheckedChangeListener(null);
+ getShareViaLinkSwitch().setChecked(false);
+ shareViaLinkSwitch.setOnCheckedChangeListener(
+ mOnShareViaLinkSwitchCheckedChangeListener
+ );
+ }
+ getExpirationDateSection().setVisibility(View.GONE);
+ getPasswordSection().setVisibility(View.GONE);
+ getGetLinkButton().setVisibility(View.GONE);
+ }
+ }
+
+
+ /// BEWARE: next methods will failed with NullPointerException if called before onCreateView() finishes
+
+ private Switch getShareViaLinkSwitch() {
+ return (Switch) getView().findViewById(R.id.shareViaLinkSectionSwitch);
+ }
+
+ private View getExpirationDateSection() {
+ return getView().findViewById(R.id.shareViaLinkExpirationSection);
+ }
+
+ private Switch getExpirationDateSwitch() {
+ return (Switch) getView().findViewById(R.id.shareViaLinkExpirationSwitch);
+ }
+
+ private TextView getExpirationDateValue() {
+ return (TextView) getView().findViewById(R.id.shareViaLinkExpirationValue);
+ }
+
+ private View getPasswordSection() {
+ return getView().findViewById(R.id.shareViaLinkPasswordSection);
+ }
+
+ private Switch getPasswordSwitch() {
+ return (Switch) getView().findViewById(R.id.shareViaLinkPasswordSwitch);
+ }
+
+ private TextView getPasswordValue() {
+ return (TextView) getView().findViewById(R.id.shareViaLinkPasswordValue);
+ }
+
+ private AppCompatButton getGetLinkButton() {
+ return (AppCompatButton) getView().findViewById(R.id.shareViaLinkGetLinkButton);
+ }
+
+ /**
+ * Hides all the UI elements related to public share
+ */
+ private void hidePublicShare() {
+ getShareViaLinkSwitch().setVisibility(View.GONE);
+ getExpirationDateSection().setVisibility(View.GONE);
+ getPasswordSection().setVisibility(View.GONE);
+ getGetLinkButton().setVisibility(View.GONE);
+ }
+
+ public static void setListViewHeightBasedOnChildren(ListView listView) {
+ ListAdapter listAdapter = listView.getAdapter();
+ if (listAdapter == null) {
+ return;
+ }
+ int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.AT_MOST);
+ int totalHeight = 0;
+ View view = null;
+ for (int i = 0; i < listAdapter.getCount(); i++) {
+ view = listAdapter.getView(i, view, listView);
+ if (i == 0) {
+ view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT));
+ }
+ view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
+ totalHeight += view.getMeasuredHeight();
+ }
+ ViewGroup.LayoutParams params = listView.getLayoutParams();
+ params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
+ listView.setLayoutParams(params);
+ listView.requestLayout();
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ * <p/>
+ * See the Android Training lesson <a href=
+ * "http://developer.android.com/training/basics/fragments/communicating.html"
+ * >Communicating with Other Fragments</a> for more information.
+ */
+ public interface OnShareFragmentInteractionListener {
+ void showSearchUsersAndGroups();
+ void refreshUsersOrGroupsListFromServer();
+ void unshareWith(OCShare share);
+ }
+
+}
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.utils.DisplayUtils;
/**
public ProgressListener mProgressListener;
private boolean mListening;
-
+
private static final String TAG = FileDownloadFragment.class.getSimpleName();
-
+
private boolean mIgnoreFirstSavedState;
private boolean mError;
mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST);
mAccount = args.getParcelable(ARG_ACCOUNT);
}
-
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
-
+
if (savedInstanceState != null) {
if (!mIgnoreFirstSavedState) {
- setFile((OCFile)savedInstanceState.getParcelable(FileDownloadFragment.EXTRA_FILE));
+ setFile((OCFile) savedInstanceState.getParcelable(FileDownloadFragment.EXTRA_FILE));
mAccount = savedInstanceState.getParcelable(FileDownloadFragment.EXTRA_ACCOUNT);
mError = savedInstanceState.getBoolean(FileDownloadFragment.EXTRA_ERROR);
- } else {
+ }
+ else {
mIgnoreFirstSavedState = false;
}
}
-
- View view = null;
- view = inflater.inflate(R.layout.file_download_fragment, container, false);
- mView = view;
+
+ mView = inflater.inflate(R.layout.file_download_fragment, container, false);
ProgressBar progressBar = (ProgressBar)mView.findViewById(R.id.progressBar);
+ DisplayUtils.colorPreLollipopHorizontalProgressBar(progressBar);
mProgressListener = new ProgressListener(progressBar);
-
+
(mView.findViewById(R.id.cancelBtn)).setOnClickListener(this);
(mView.findViewById(R.id.fileDownloadLL)).setOnClickListener(new OnClickListener() {
if (mError) {
setButtonsForRemote();
- } else {
+ }
+ else {
setButtonsForTransferring();
}
-
- return view;
+
+ return mView;
}
-
+
@Override
public void onSaveInstanceState(Bundle outState) {
super.onStart();
listenForTransferProgress();
}
-
+
@Override
public void onResume() {
super.onResume();
super.onPause();
}
-
+
@Override
public void onStop() {
leaveTransferProgress();
super.onStop();
}
-
+
@Override
public void onDestroy() {
super.onDestroy();
}
-
-
+
+
@Override
public View getView() {
if (!mListening) {
return super.getView() == null ? mView : super.getView();
}
-
+
@Override
public void onClick(View v) {
switch (v.getId()) {
}
}
-
+
/**
* Enables or disables buttons for a file being downloaded
*/
private void setButtonsForTransferring() {
getView().findViewById(R.id.cancelBtn).setVisibility(View.VISIBLE);
-
+
// show the progress bar for the transfer
getView().findViewById(R.id.progressBar).setVisibility(View.VISIBLE);
- TextView progressText = (TextView)getView().findViewById(R.id.progressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.progressText);
progressText.setText(R.string.downloader_download_in_progress_ticker);
progressText.setVisibility(View.VISIBLE);
-
+
// hides the error icon
getView().findViewById(R.id.errorText).setVisibility(View.GONE);
getView().findViewById(R.id.error_image).setVisibility(View.GONE);
}
-
/**
- * Enables or disables buttons for a file locally available
+ * Enables or disables buttons for a file locally available
*/
private void setButtonsForDown() {
getView().findViewById(R.id.cancelBtn).setVisibility(View.GONE);
-
+
// hides the progress bar
getView().findViewById(R.id.progressBar).setVisibility(View.GONE);
-
+
// updates the text message
- TextView progressText = (TextView)getView().findViewById(R.id.progressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.progressText);
progressText.setText(R.string.common_loading);
progressText.setVisibility(View.VISIBLE);
-
+
// hides the error icon
getView().findViewById(R.id.errorText).setVisibility(View.GONE);
getView().findViewById(R.id.error_image).setVisibility(View.GONE);
}
-
+
/**
- * Enables or disables buttons for a file not locally available
- *
+ * Enables or disables buttons for a file not locally available
+ * <p/>
* Currently, this is only used when a download was failed
*/
private void setButtonsForRemote() {
getView().findViewById(R.id.cancelBtn).setVisibility(View.GONE);
-
+
// hides the progress bar and message
getView().findViewById(R.id.progressBar).setVisibility(View.GONE);
getView().findViewById(R.id.progressText).setVisibility(View.GONE);
getView().findViewById(R.id.errorText).setVisibility(View.VISIBLE);
getView().findViewById(R.id.error_image).setVisibility(View.VISIBLE);
}
-
+
public void listenForTransferProgress() {
if (mProgressListener != null && !mListening) {
}
}
}
-
-
+
+
public void leaveTransferProgress() {
if (mProgressListener != null) {
if (mContainerActivity.getFileDownloaderBinder() != null) {
private class ProgressListener implements OnDatatransferProgressListener {
int mLastPercent = 0;
WeakReference<ProgressBar> mProgressBar = null;
-
+
ProgressListener(ProgressBar progressBar) {
mProgressBar = new WeakReference<ProgressBar>(progressBar);
}
-
+
@Override
public void onTransferProgress(
long progressRate, long totalTransferredSoFar, long totalToTransfer, String filename
public void setError(boolean error) {
mError = error;
- };
-
+ }
+
+ ;
}
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Movie;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
-import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.datamodel.OCFile;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
public class ImageViewCustom extends ImageView {
private int mBitmapHeight;
private int mBitmapWidth;
-
+ private Movie mGifMovie;
+ private int mMovieWidth, mMovieHeight;
+ private long mMovieDuration;
+ private long mMovieRunDuration;
+ private long mLastTick;
+
public ImageViewCustom(Context context) {
super(context);
}
@SuppressLint("NewApi")
@Override
protected void onDraw(Canvas canvas) {
-
if(IS_ICS_OR_HIGHER && checkIfMaximumBitmapExceed(canvas) || IS_VERSION_BUGGY_ON_RECYCLES ) {
// Software type is set with two targets:
// 1. prevent that bitmaps larger than maximum textures allowed are shown as black views in devices
// with LAYER_TYPE_HARDWARE enabled by default;
- // 2. grant that bitmaps are correctly dellocated from memory in versions suffering the bug fixed in
+ // 2. grant that bitmaps are correctly de-allocated from memory in versions suffering the bug fixed in
// https://android.googlesource.com/platform/frameworks/base/+/034de6b1ec561797a2422314e6ef03e3cd3e08e0;
//
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
- super.onDraw(canvas);
+ if(mGifMovie == null){
+ super.onDraw(canvas);
+ } else {
+ long nowTick = android.os.SystemClock.uptimeMillis();
+ if (mLastTick == 0) {
+ mMovieRunDuration = 0;
+ } else {
+ mMovieRunDuration += nowTick - mLastTick;
+ if(mMovieRunDuration > mMovieDuration){
+ mMovieRunDuration = 0;
+ }
+ }
+
+ mGifMovie.setTime((int) mMovieRunDuration);
+
+ float scale;
+ if(mGifMovie.height() > getHeight() || mGifMovie.width() > getWidth()) {
+ scale = (1f / Math.min(canvas.getHeight() / mGifMovie.height(),
+ canvas.getWidth() / mGifMovie.width())) + 0.25f;
+ } else {
+ scale = Math.min(canvas.getHeight() / mGifMovie.height(),
+ canvas.getWidth() / mGifMovie.width());
+ }
+
+ canvas.scale(scale, scale);
+ canvas.translate(((float) getWidth() / scale - (float) mGifMovie.width()) / 2f,
+ ((float) getHeight() / scale - (float) mGifMovie.height()) /2f);
+
+ mGifMovie.draw(canvas, 0, 0);
+
+ mLastTick = nowTick;
+ invalidate();
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (mGifMovie == null){
+ setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
+ } else {
+ setMeasuredDimension(mMovieWidth, mMovieHeight);
+ }
}
/**
*/
@SuppressLint("NewApi")
private boolean checkIfMaximumBitmapExceed(Canvas canvas) {
- Log_OC.v(TAG, "Canvas maximum: " + canvas.getMaximumBitmapWidth() + " - " + canvas.getMaximumBitmapHeight());
- if (mBitmapWidth > canvas.getMaximumBitmapWidth()
- || mBitmapHeight > canvas.getMaximumBitmapHeight()) {
- return true;
- }
-
- return false;
+ return mBitmapWidth > canvas.getMaximumBitmapWidth()
+ || mBitmapHeight > canvas.getMaximumBitmapHeight();
+
}
@Override
* Keeps the size of the bitmap cached in member variables for faster access in {@link #onDraw(Canvas)} ,
* but without keeping another reference to the {@link Bitmap}
*/
- public void setImageBitmap (Bitmap bm) {
+ public void setImageBitmap(Bitmap bm) {
mBitmapWidth = bm.getWidth();
mBitmapHeight = bm.getHeight();
super.setImageBitmap(bm);
}
+ public void setGifImage(OCFile file){
+ try {
+ InputStream gifInputStream = new FileInputStream(file.getStoragePath());
+ setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+ setFocusable(true);
+
+ mGifMovie = Movie.decodeStream(gifInputStream);
+ mMovieWidth = mGifMovie.width();
+ mMovieHeight = mGifMovie.height();
+ mMovieDuration = mGifMovie.duration();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
}
import android.view.Window;
import com.ortiz.touch.ExtendedViewPager;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.operations.CreateShareOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
-import com.owncloud.android.operations.UnshareLinkOperation;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.fragment.FileFragment;
-import com.owncloud.android.utils.DisplayUtils;
/**
// ActionBar
ActionBar actionBar = getSupportActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
updateActionBarTitleAndHomeButton(null);
actionBar.hide();
}
});
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ getWindow().setStatusBarColor(getResources().getColor(R.color.owncloud_blue_dark_transparent));
+ }
}
if (savedInstanceState != null) {
parentFolder = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
}
- // TODO Enable when "On Device" is recovered ?
mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(),
- parentFolder, getAccount(), getStorageManager()/*, MainApp.getOnlyOnDevice()*/);
+ parentFolder, getAccount(), getStorageManager(), MainApp.getOnlyOnDevice());
mViewPager = (ExtendedViewPager) findViewById(R.id.fragmentPager);
int position = mHasSavedPosition ? mSavedPosition :
public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
super.onRemoteOperationFinish(operation, result);
- if (operation instanceof CreateShareOperation) {
- onCreateShareOperationFinish((CreateShareOperation) operation, result);
-
- } else if (operation instanceof UnshareLinkOperation) {
- onUnshareLinkOperationFinish((UnshareLinkOperation) operation, result);
-
- } else if (operation instanceof RemoveFileOperation) {
+ if (operation instanceof RemoveFileOperation) {
finish();
} else if (operation instanceof SynchronizeFileOperation) {
onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
}
}
-
- private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
- RemoteOperationResult result) {
- if (result.isSuccess()) {
- OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
- if (file != null) {
- setFile(file);
- }
- invalidateOptionsMenu();
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- backToDisplayActivity();
- }
-
- }
-
- private void onCreateShareOperationFinish(CreateShareOperation operation,
- RemoteOperationResult result) {
- if (result.isSuccess()) {
- OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
- if (file != null) {
- setFile(file);
- }
- invalidateOptionsMenu();
- }
- }
-
private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
RemoteOperationResult result) {
if (result.isSuccess()) {
}
-
private void requestForDownload(OCFile file) {
if (mDownloaderBinder == null) {
Log_OC.d(TAG, "requestForDownload called without binder to download service");
OCFile currentFile = mPreviewImagePagerAdapter.getFileAt(position);
getSupportActionBar().setTitle(currentFile.getFileName());
mDrawerToggle.setDrawerIndicatorEnabled(false);
- if (!currentFile.isDown()) {
- if (!mPreviewImagePagerAdapter.pendingErrorAt(position)) {
- requestForDownload(currentFile);
- }
- }
-
+
// Call to reset image zoom to initial state
((PreviewImagePagerAdapter) mViewPager.getAdapter()).resetZoom();
}
/**
* Checks if OS version is Honeycomb one or higher
- *
+ *
* @return boolean
*/
private boolean isHoneycombOrHigher() {
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Point;
+import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.files.FileMenuFilter;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
private static final String ARG_FILE = "FILE";
private static final String ARG_IGNORE_FIRST = "IGNORE_FIRST";
+ private static final String ARG_SHOW_RESIZED_IMAGE = "SHOW_RESIZED_IMAGE";
private TouchImageViewCustom mImageView;
private TextView mMessageView;
private ProgressBar mProgressWheel;
+ private Boolean mShowResizedImage = false;
+
public Bitmap mBitmap = null;
-
+
private static final String TAG = PreviewImageFragment.class.getSimpleName();
private boolean mIgnoreFirstSavedState;
-
+
private LoadBitmapTask mLoadBitmapTask = null;
* {@link FragmentStatePagerAdapter}
* ; TODO better solution
*/
- public static PreviewImageFragment newInstance(OCFile imageFile, boolean ignoreFirstSavedState){
+ public static PreviewImageFragment newInstance(OCFile imageFile, boolean ignoreFirstSavedState,
+ boolean showResizedImage){
PreviewImageFragment frag = new PreviewImageFragment();
+ frag.mShowResizedImage = showResizedImage;
Bundle args = new Bundle();
args.putParcelable(ARG_FILE, imageFile);
args.putBoolean(ARG_IGNORE_FIRST, ignoreFirstSavedState);
+ args.putBoolean(ARG_SHOW_RESIZED_IMAGE, showResizedImage);
frag.setArguments(args);
return frag;
}
-
+
/**
* Creates an empty fragment for image previews.
public PreviewImageFragment() {
mIgnoreFirstSavedState = false;
}
-
-
+
+
/**
* {@inheritDoc}
*/
// not right now
mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST);
+ mShowResizedImage = args.getBoolean(ARG_SHOW_RESIZED_IMAGE);
setHasOptionsMenu(true);
}
-
+
/**
* {@inheritDoc}
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.preview_image_fragment, container, false);
mImageView = (TouchImageViewCustom) view.findViewById(R.id.image);
if (getFile() == null) {
throw new IllegalStateException("Instanced with a NULL OCFile");
}
- if (!getFile().isDown()) {
- throw new IllegalStateException("There is no local file to preview");
- }
}
-
+
/**
* {@inheritDoc}
super.onSaveInstanceState(outState);
outState.putParcelable(PreviewImageFragment.EXTRA_FILE, getFile());
}
-
+
@Override
public void onStart() {
super.onStart();
if (getFile() != null) {
- mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
- //mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()});
- mLoadBitmapTask.execute(getFile().getStoragePath());
+ mImageView.setTag(getFile().getFileId());
+
+ if (mShowResizedImage){
+ Bitmap resizedImage = ThumbnailsCacheManager.getBitmapFromDiskCache(
+ String.valueOf("r" + getFile().getRemoteId()));
+
+ if (resizedImage != null && !getFile().needsUpdateThumbnail()){
+ mProgressWheel.setVisibility(View.GONE);
+ mImageView.setImageBitmap(resizedImage);
+ mImageView.setVisibility(View.VISIBLE);
+ mBitmap = resizedImage;
+ } else {
+ // show thumbnail while loading resized image
+ Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(
+ String.valueOf("t" + getFile().getRemoteId()));
+
+ if (thumbnail != null){
+ mImageView.setImageBitmap(thumbnail);
+ mProgressWheel.setVisibility(View.VISIBLE);
+ mImageView.setVisibility(View.VISIBLE);
+ mBitmap = thumbnail;
+ } else {
+ thumbnail = ThumbnailsCacheManager.mDefaultImg;
+ }
+
+ // generate new resized image
+ if (ThumbnailsCacheManager.cancelPotentialWork(getFile(), mImageView) &&
+ mContainerActivity.getStorageManager() != null) {
+ final ThumbnailsCacheManager.ThumbnailGenerationTask task =
+ new ThumbnailsCacheManager.ThumbnailGenerationTask(
+ mImageView, mContainerActivity.getStorageManager(),
+ mContainerActivity.getStorageManager().getAccount(),
+ mProgressWheel);
+ if (resizedImage == null) {
+ resizedImage = thumbnail;
+ }
+ final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =
+ new ThumbnailsCacheManager.AsyncDrawable(
+ MainApp.getAppContext().getResources(),
+ resizedImage,
+ task
+ );
+ mImageView.setImageDrawable(asyncDrawable);
+ task.execute(getFile(), false);
+ }
+ }
+ } else {
+ mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
+ mLoadBitmapTask.execute(getFile());
+ }
}
}
-
-
+
+
@Override
public void onStop() {
Log_OC.d(TAG, "onStop starts");
}
super.onStop();
}
-
+
/**
* {@inheritDoc}
*/
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.file_actions_menu, menu);
+
+// MenuItem item = menu.findItem(R.id.action_set_as_wallpaper);
+// item.setVisible(getFile().isDown());
}
/**
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
-
+
if (mContainerActivity.getStorageManager() != null) {
// Update the file
setFile(mContainerActivity.getStorageManager().getFileById(getFile().getFileId()));
-
+
FileMenuFilter mf = new FileMenuFilter(
getFile(),
mContainerActivity.getStorageManager().getAccount(),
);
mf.filter(menu);
}
-
+
// additional restriction for this fragment
// TODO allow renaming in PreviewImageFragment
MenuItem item = menu.findItem(R.id.action_rename_file);
item.setVisible(false);
item.setEnabled(false);
}
-
+
// additional restriction for this fragment
// TODO allow refresh file in PreviewImageFragment
item = menu.findItem(R.id.action_sync_file);
item.setVisible(false);
item.setEnabled(false);
}
-
+
+ // additional restriction for this fragment
+ item = menu.findItem(R.id.action_copy);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
}
-
-
+
/**
* {@inheritDoc}
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
- return true;
- }
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
+ mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
return true;
}
case R.id.action_open_file_with: {
return true;
}
case R.id.action_send_file: {
- mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
- return true;
+ if (getFile().isImage() && !getFile().isDown()){
+ mContainerActivity.getFileOperationsHelper().sendCachedImage(getFile());
+ return true;
+ } else {
+ mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
+ return true;
+ }
}
+ case R.id.action_download_file:
case R.id.action_sync_file: {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
return true;
}
+ case R.id.action_set_as_wallpaper:{
+ mContainerActivity.getFileOperationsHelper().setPictureAs(getFile());
+ return true;
+ }
default:
return false;
}
}
-
+
private void seeDetails() {
- mContainerActivity.showDetails(getFile());
+ mContainerActivity.showDetails(getFile());
}
-
@Override
public void onResume() {
super.onResume();
super.onDestroy();
}
-
+
/**
* Opens the previewed image with an external application.
*/
mContainerActivity.getFileOperationsHelper().openFile(getFile());
finish();
}
+
-
- private class LoadBitmapTask extends AsyncTask<String, Void, Bitmap> {
+ private class LoadBitmapTask extends AsyncTask<OCFile, Void, LoadImage> {
/**
* Weak reference to the target {@link ImageView} where the bitmap will be loaded into.
*/
private final WeakReference<TextView> mMessageViewRef;
-
+
/**
* Weak reference to the target {@link ProgressBar} shown while the load is in progress.
*
*/
private final WeakReference<ProgressBar> mProgressWheelRef;
-
+
/**
- * Error message to show when a load fails
+ * Error message to show when a load fails
*/
private int mErrorMessageId;
-
-
+
+
/**
* Constructor.
- *
- * @param imageView Target {@link ImageView} where the bitmap will be loaded into.
+ *
+ * @param imageView Target {@link ImageView} where the bitmap will be loaded into.
*/
public LoadBitmapTask(ImageViewCustom imageView, TextView messageView,
ProgressBar progressWheel) {
mMessageViewRef = new WeakReference<TextView>(messageView);
mProgressWheelRef = new WeakReference<ProgressBar>(progressWheel);
}
-
-
+
@Override
- protected Bitmap doInBackground(String... params) {
+ protected LoadImage doInBackground(OCFile... params) {
Bitmap result = null;
if (params.length != 1) return null;
- String storagePath = params[0];
+ OCFile ocFile = params[0];
+ String storagePath = ocFile.getStoragePath();
try {
int maxDownScale = 3; // could be a parameter passed to doInBackground(...)
result = BitmapUtils.decodeSampledBitmapFromFile(storagePath, minWidth,
minHeight);
- if (isCancelled()) return result;
+ if (isCancelled()) return new LoadImage(result, ocFile);
if (result == null) {
mErrorMessageId = R.string.preview_image_error_unknown_format;
} catch (NoSuchFieldError e) {
mErrorMessageId = R.string.common_error_unknown;
- Log_OC.e(TAG, "Error from access to unexisting field despite protection; file "
- + storagePath, e);
-
+ Log_OC.e(TAG, "Error from access to unexisting field despite protection; file "
+ + storagePath, e);
+
} catch (Throwable t) {
mErrorMessageId = R.string.common_error_unknown;
Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t);
-
+
}
-
- return result;
+
+ return new LoadImage(result, ocFile);
}
-
+
@Override
- protected void onCancelled(Bitmap result) {
- if (result != null) {
- result.recycle();
+ protected void onCancelled(LoadImage result) {
+ if (result != null && result.bitmap != null) {
+ result.bitmap.recycle();
}
}
@Override
- protected void onPostExecute(Bitmap result) {
+ protected void onPostExecute(LoadImage result) {
hideProgressWheel();
- if (result != null) {
+ if (result.bitmap != null) {
showLoadedImage(result);
- } else {
+ }
+ else {
showErrorMessage();
}
- if (result != null && mBitmap != result) {
+ if (result.bitmap != null && mBitmap != result.bitmap) {
// unused bitmap, release it! (just in case)
- result.recycle();
+ result.bitmap.recycle();
}
}
-
+
@SuppressLint("InlinedApi")
- private void showLoadedImage(Bitmap result) {
+ private void showLoadedImage(LoadImage result) {
final ImageViewCustom imageView = mImageViewRef.get();
+ Bitmap bitmap = result.bitmap;
if (imageView != null) {
- Log_OC.d(TAG, "Showing image with resolution " + result.getWidth() + "x" +
- result.getHeight());
- imageView.setImageBitmap(result);
+ Log_OC.d(TAG, "Showing image with resolution " + bitmap.getWidth() + "x" +
+ bitmap.getHeight());
+
+ if (result.ocFile.getMimetype().equalsIgnoreCase("image/png")){
+ Drawable backrepeat = getResources().getDrawable(R.drawable.backrepeat);
+ imageView.setBackground(backrepeat);
+ }
+
+ if (result.ocFile.getMimetype().equalsIgnoreCase("image/gif")){
+ imageView.setGifImage(result.ocFile);
+ } else {
+ imageView.setImageBitmap(bitmap);
+ }
+
imageView.setVisibility(View.VISIBLE);
- mBitmap = result; // needs to be kept for recycling when not useful
+ mBitmap = bitmap; // needs to be kept for recycling when not useful
}
final TextView messageView = mMessageViewRef.get();
messageView.setVisibility(View.GONE);
} // else , silently finish, the fragment was destroyed
}
-
+
private void showErrorMessage() {
final ImageView imageView = mImageViewRef.get();
if (imageView != null) {
messageView.setVisibility(View.VISIBLE);
} // else , silently finish, the fragment was destroyed
}
-
+
private void hideProgressWheel() {
final ProgressBar progressWheel = mProgressWheelRef.get();
if (progressWheel != null) {
progressWheel.setVisibility(View.GONE);
}
}
-
+
}
/**
return (file != null && file.isImage());
}
-
+
/**
* Finishes the preview
*/
Activity container = getActivity();
container.finish();
}
-
+
public TouchImageViewCustom getImageView() {
return mImageView;
}
+ private class LoadImage {
+ private Bitmap bitmap;
+ private OCFile ocFile;
+
+ public LoadImage(Bitmap bitmap, OCFile ocFile){
+ this.bitmap = bitmap;
+ this.ocFile = ocFile;
+ }
+
+ }
+
}
import java.util.Vector;
import android.accounts.Account;
+import android.graphics.Bitmap;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.ui.adapter.FileListListAdapter;
import com.owncloud.android.ui.fragment.FileFragment;
import com.owncloud.android.utils.FileStorageUtils;
* @param storageManager Bridge to database.
*/
public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder,
- Account account, FileDataStorageManager storageManager /*,
- boolean onlyOnDevice*/) {
+ Account account, FileDataStorageManager storageManager,
+ boolean onlyOnDevice) {
super(fragmentManager);
if (fragmentManager == null) {
mAccount = account;
mStorageManager = storageManager;
- // TODO Enable when "On Device" is recovered ?
- mImageFiles = mStorageManager.getFolderImages(parentFolder/*, false*/);
+ mImageFiles = mStorageManager.getFolderImages(parentFolder, onlyOnDevice);
- mImageFiles = FileStorageUtils.sortFolder(mImageFiles);
+ mImageFiles = FileStorageUtils.sortOcFolder(mImageFiles);
mObsoleteFragments = new HashSet<Object>();
mObsoletePositions = new HashSet<Integer>();
Fragment fragment = null;
if (file.isDown()) {
fragment = PreviewImageFragment.newInstance(file,
- mObsoletePositions.contains(Integer.valueOf(i)));
+ mObsoletePositions.contains(Integer.valueOf(i)), false);
} else if (mDownloadErrors.contains(Integer.valueOf(i))) {
fragment = FileDownloadFragment.newInstance(file, mAccount, true);
((FileDownloadFragment)fragment).setError(true);
mDownloadErrors.remove(Integer.valueOf(i));
-
} else {
- fragment = FileDownloadFragment.newInstance(
- file, mAccount, mObsoletePositions.contains(Integer.valueOf(i))
- );
+ fragment = PreviewImageFragment.newInstance(file,
+ mObsoletePositions.contains(Integer.valueOf(i)), true);
}
mObsoletePositions.remove(Integer.valueOf(i));
return fragment;
package com.owncloud.android.ui.preview;
import android.accounts.Account;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
import android.app.Activity;
-import android.app.AlertDialog;
+import android.content.ActivityNotFoundException;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.media.MediaMetadataRetriever;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.support.v7.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
-import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.view.LayoutInflater;
import android.widget.Toast;
import android.widget.VideoView;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.files.FileMenuFilter;
+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.OwnCloudCredentials;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.media.MediaControlView;
import com.owncloud.android.media.MediaService;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
import com.owncloud.android.ui.fragment.FileFragment;
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+
/**
* This fragment shows a preview of a downloaded media file (audio or video).
- *
+ *
* Trying to get an instance with NULL {@link OCFile} or ownCloud {@link Account} values will
* produce an {@link IllegalStateException}.
*
private ImageView mImagePreview;
private VideoView mVideoPreview;
private int mSavedPlaybackPosition;
-
+ private String mUri;
+
private MediaServiceBinder mMediaServiceBinder = null;
private MediaControlView mMediaController = null;
private MediaServiceConnection mMediaServiceConnection = null;
private VideoHelper mVideoHelper;
private boolean mAutoplay;
public boolean mPrepared;
-
+
private static final String TAG = PreviewMediaFragment.class.getSimpleName();
-
+
/**
* Creates a fragment to preview a file.
- *
+ * <p/>
* When 'fileToDetail' or 'ocAccount' are null
- *
- * @param fileToDetail An {@link OCFile} to preview in the fragment
- * @param ocAccount An ownCloud account; needed to start downloads
+ *
+ * @param fileToDetail An {@link OCFile} to preview in the fragment
+ * @param ocAccount An ownCloud account; needed to start downloads
*/
public PreviewMediaFragment(
- OCFile fileToDetail,
- Account ocAccount,
- int startPlaybackPosition,
+ OCFile fileToDetail,
+ Account ocAccount,
+ int startPlaybackPosition,
boolean autoplay) {
-
+
super(fileToDetail);
mAccount = ocAccount;
mSavedPlaybackPosition = startPlaybackPosition;
mAutoplay = autoplay;
}
-
-
+
+
/**
- * Creates an empty fragment for previews.
- *
- * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically
- * (for instance, when the device is turned a aside).
- *
- * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful
- * construction
+ * Creates an empty fragment for previews.
+ * <p/>
+ * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically
+ * (for instance, when the device is turned a aside).
+ * <p/>
+ * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful
+ * construction
*/
public PreviewMediaFragment() {
super();
mSavedPlaybackPosition = 0;
mAutoplay = true;
}
-
-
+
+
/**
* {@inheritDoc}
*/
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
-
+
/**
* {@inheritDoc}
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
- Log_OC.e(TAG, "onCreateView");
+ Log_OC.v(TAG, "onCreateView");
+
-
mView = inflater.inflate(R.layout.file_preview, container, false);
-
- mImagePreview = (ImageView)mView.findViewById(R.id.image_preview);
- mVideoPreview = (VideoView)mView.findViewById(R.id.video_preview);
+
+ mImagePreview = (ImageView) mView.findViewById(R.id.image_preview);
+ mVideoPreview = (VideoView) mView.findViewById(R.id.video_preview);
mVideoPreview.setOnTouchListener(this);
-
- mMediaController = (MediaControlView)mView.findViewById(R.id.media_controller);
-
+
+ mMediaController = (MediaControlView) mView.findViewById(R.id.media_controller);
+
return mView;
}
-
+
/**
* {@inheritDoc}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- Log_OC.e(TAG, "onActivityCreated");
+ Log_OC.v(TAG, "onActivityCreated");
OCFile file = getFile();
if (savedInstanceState == null) {
if (mAccount == null) {
throw new IllegalStateException("Instanced with a NULL ownCloud Account");
}
- if (!file.isDown()) {
- throw new IllegalStateException("There is no local file to preview");
- }
-
- } else {
- file = (OCFile)savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE);
+ }
+ else {
+ file = (OCFile) savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE);
setFile(file);
mAccount = savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_ACCOUNT);
- mSavedPlaybackPosition =
+ mSavedPlaybackPosition =
savedInstanceState.getInt(PreviewMediaFragment.EXTRA_PLAY_POSITION);
mAutoplay = savedInstanceState.getBoolean(PreviewMediaFragment.EXTRA_PLAYING);
-
+
}
- if (file != null && file.isDown()) {
+ if (file != null) {
if (file.isVideo()) {
mVideoPreview.setVisibility(View.VISIBLE);
mImagePreview.setVisibility(View.GONE);
prepareVideo();
-
- } else {
+
+ }
+ else {
mVideoPreview.setVisibility(View.GONE);
mImagePreview.setVisibility(View.VISIBLE);
+ extractAndSetCoverArt(file);
}
}
-
+
}
-
+
+ /**
+ * tries to read the cover art from the audio file and sets it as cover art.
+ *
+ * @param file audio file with potential cover art
+ */
+ private void extractAndSetCoverArt(OCFile file) {
+ if (file.isAudio()) {
+ try {
+ MediaMetadataRetriever mmr = new MediaMetadataRetriever();
+ mmr.setDataSource(file.getStoragePath());
+ byte[] data = mmr.getEmbeddedPicture();
+ if (data != null) {
+ Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
+ mImagePreview.setImageBitmap(bitmap); //associated cover art in bitmap
+ } else {
+ mImagePreview.setImageResource(R.drawable.logo);
+ }
+ } catch (Throwable t) {
+ mImagePreview.setImageResource(R.drawable.logo);
+ }
+ }
+ }
+
/**
* {@inheritDoc}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- Log_OC.e(TAG, "onSaveInstanceState");
-
+ Log_OC.v(TAG, "onSaveInstanceState");
+
outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, getFile());
outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount);
-
+
if (getFile().isVideo()) {
mSavedPlaybackPosition = mVideoPreview.getCurrentPosition();
mAutoplay = mVideoPreview.isPlaying();
- outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION , mSavedPlaybackPosition);
- outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING , mAutoplay);
- } else {
+ outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION, mSavedPlaybackPosition);
+ outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING, mAutoplay);
+ }
+ else {
outState.putInt(
- PreviewMediaFragment.EXTRA_PLAY_POSITION ,
+ PreviewMediaFragment.EXTRA_PLAY_POSITION,
mMediaServiceBinder.getCurrentPosition());
outState.putBoolean(
- PreviewMediaFragment.EXTRA_PLAYING , mMediaServiceBinder.isPlaying());
+ PreviewMediaFragment.EXTRA_PLAYING, mMediaServiceBinder.isPlaying());
}
}
-
+
@Override
public void onStart() {
super.onStart();
- Log_OC.e(TAG, "onStart");
+ Log_OC.v(TAG, "onStart");
OCFile file = getFile();
- if (file != null && file.isDown()) {
- if (file.isAudio()) {
- bindMediaService();
-
- } else if (file.isVideo()) {
- stopAudio();
- playVideo();
- }
+ if (file != null) {
+ if (file.isAudio()) {
+ bindMediaService();
+
+ }
+ else {
+ if (file.isVideo()) {
+ stopAudio();
+ playVideo();
+ }
+ }
}
}
-
-
+
+
private void stopAudio() {
Intent i = new Intent(getActivity(), MediaService.class);
i.setAction(MediaService.ACTION_STOP_ALL);
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
-
+
if (mContainerActivity.getStorageManager() != null) {
FileMenuFilter mf = new FileMenuFilter(
getFile(),
item.setVisible(false);
item.setEnabled(false);
}
+
+ // additional restriction for this fragment
+ item = menu.findItem(R.id.action_copy);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
}
-
-
+
+
/**
* {@inheritDoc}
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- stopPreview(false);
- mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
- return true;
- }
- case R.id.action_unshare_file: {
- stopPreview(false);
- mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
+ seeShareFile();
return true;
}
case R.id.action_open_file_with: {
return false;
}
}
-
/**
* Update the file of the fragment with file value
- * @param file
+ *
+ * @param file Replaces the held file with a new one
*/
- public void updateFile(OCFile file){
+ public void updateFile(OCFile file) {
setFile(file);
}
-
+
private void sendFile() {
stopPreview(false);
mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
-
+
}
private void seeDetails() {
stopPreview(false);
- mContainerActivity.showDetails(getFile());
+ mContainerActivity.showDetails(getFile());
}
+ private void seeShareFile() {
+ stopPreview(false);
+ mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
+ }
private void prepareVideo() {
// create helper to get more control on the playback
mVideoPreview.setOnCompletionListener(mVideoHelper);
mVideoPreview.setOnErrorListener(mVideoHelper);
}
-
+
@SuppressWarnings("static-access")
private void playVideo() {
// create and prepare control panel for the user
mMediaController.setMediaPlayer(mVideoPreview);
-
+
// load the video file in the video player ;
// when done, VideoHelper#onPrepared() will be called
- Uri uri = Uri.parse(getFile().getStoragePath());
- mVideoPreview.setVideoPath(uri.encode(getFile().getStoragePath()));
+ if (getFile().isDown()) {
+ mUri = getFile().getStoragePath();
+ } else {
+ Context context = MainApp.getAppContext();
+ Account account = mContainerActivity.getStorageManager().getAccount();
+
+ mUri = generateUrlWithCredentials(account, context, getFile());
+ }
+
+ mVideoPreview.setVideoURI(getFile().getStorageUri());
}
-
+
+ public static String generateUrlWithCredentials(Account account, Context context, OCFile file){
+ OwnCloudAccount ocAccount = null;
+ try {
+ ocAccount = new OwnCloudAccount(account, context);
+
+ final ClientGenerationTask task = new ClientGenerationTask();
+ task.execute(ocAccount);
+
+ OwnCloudClient mClient = task.get();
+ String url = AccountUtils.constructFullURLForAccount(context, account) + Uri.encode(file.getRemotePath(), "/");
+ OwnCloudCredentials credentials = mClient.getCredentials();
+
+ return url.replace("//", "//" + credentials.getUsername() + ":" + credentials.getAuthToken() + "@");
+
+ } catch (AccountUtils.AccountNotFoundException e) {
+ e.printStackTrace();
+
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ return "";
+ }
+
+ public static class ClientGenerationTask extends AsyncTask<Object, Void, OwnCloudClient> {
+ @Override
+ protected OwnCloudClient doInBackground(Object... params) {
+ Object account = params[0];
+ if (account instanceof OwnCloudAccount){
+ try {
+ OwnCloudAccount ocAccount = (OwnCloudAccount) account;
+ return OwnCloudClientManagerFactory.getDefaultSingleton().
+ getClientFor(ocAccount, MainApp.getAppContext());
+ } catch (AccountUtils.AccountNotFoundException e) {
+ e.printStackTrace();
+ } catch (OperationCanceledException e) {
+ e.printStackTrace();
+ } catch (AuthenticatorException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return null;
+ }
+ }
+
private class VideoHelper implements OnCompletionListener, OnPreparedListener, OnErrorListener {
-
- /**
+
+ /**
* Called when the file is ready to be played.
- *
+ * <p/>
* Just starts the playback.
- *
+ *
* @param vp {@link MediaPlayer} instance performing the playback.
*/
@Override
public void onPrepared(MediaPlayer vp) {
- Log_OC.e(TAG, "onPrepared");
+ Log_OC.v(TAG, "onPrepared");
mVideoPreview.seekTo(mSavedPlaybackPosition);
- if (mAutoplay) {
+ if (mAutoplay) {
mVideoPreview.start();
}
mMediaController.setEnabled(true);
mMediaController.updatePausePlay();
mPrepared = true;
}
-
-
+
+
/**
* Called when the file is finished playing.
- *
+ * <p/>
* Finishes the activity.
- *
- * @param mp {@link MediaPlayer} instance performing the playback.
+ *
+ * @param mp {@link MediaPlayer} instance performing the playback.
*/
@Override
- public void onCompletion(MediaPlayer mp) {
- Log_OC.e(TAG, "completed");
+ public void onCompletion(MediaPlayer mp) {
+ Log_OC.v(TAG, "completed");
if (mp != null) {
mVideoPreview.seekTo(0);
- // next lines are necessary to work around undesired video loops
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD) {
- mVideoPreview.pause();
-
- } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) {
- // mVideePreview.pause() is not enough
-
- mMediaController.setEnabled(false);
- mVideoPreview.stopPlayback();
- mAutoplay = false;
- mSavedPlaybackPosition = 0;
- mVideoPreview.setVideoPath(getFile().getStoragePath());
- }
} // else : called from onError()
mMediaController.updatePausePlay();
}
-
-
+
+
/**
* Called when an error in playback occurs.
- *
- * @param mp {@link MediaPlayer} instance performing the playback.
- * @param what Type of error
- * @param extra Extra code specific to the error
+ *
+ * @param mp {@link MediaPlayer} instance performing the playback.
+ * @param what Type of error
+ * @param extra Extra code specific to the error
*/
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
- if (mVideoPreview.getWindowToken() != null) {
- String message = MediaService.getMessageForMediaError(
- getActivity(), what, extra);
- new AlertDialog.Builder(getActivity())
- .setMessage(message)
- .setPositiveButton(android.R.string.VideoView_error_button,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- dialog.dismiss();
- VideoHelper.this.onCompletion(null);
- }
- })
- .setCancelable(false)
- .show();
- }
+ MediaService.streamWithExternalApp(mUri, getActivity()).show();
return true;
}
-
}
-
@Override
public void onPause() {
- Log_OC.e(TAG, "onPause");
+ Log_OC.v(TAG, "onPause");
super.onPause();
}
-
+
@Override
public void onResume() {
super.onResume();
- Log_OC.e(TAG, "onResume");
+ Log_OC.v(TAG, "onResume");
}
-
+
@Override
public void onDestroy() {
- Log_OC.e(TAG, "onDestroy");
+ Log_OC.v(TAG, "onDestroy");
super.onDestroy();
}
-
+
@Override
public void onStop() {
- Log_OC.e(TAG, "onStop");
+ Log_OC.v(TAG, "onStop");
mPrepared = false;
if (mMediaServiceConnection != null) {
mMediaServiceConnection = null;
mMediaServiceBinder = null;
}
-
+
super.onStop();
}
-
+
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN && v == mVideoPreview) {
return false;
}
-
+
private void startFullScreenVideo() {
Intent i = new Intent(getActivity(), PreviewVideoActivity.class);
i.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount);
}
@Override
- public void onConfigurationChanged (Configuration newConfig) {
- Log_OC.e(TAG, "onConfigurationChanged " + this);
+ public void onConfigurationChanged(Configuration newConfig) {
+ Log_OC.v(TAG, "onConfigurationChanged " + this);
}
-
+
@Override
- public void onActivityResult (int requestCode, int resultCode, Intent data) {
- Log_OC.e(TAG, "onActivityResult " + this);
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ Log_OC.v(TAG, "onActivityResult " + this);
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
mSavedPlaybackPosition = data.getExtras().getInt(
PreviewVideoActivity.EXTRA_START_POSITION);
- mAutoplay = data.getExtras().getBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY);
+ mAutoplay = data.getExtras().getBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY);
}
}
-
+
private void playAudio() {
OCFile file = getFile();
if (!mMediaServiceBinder.isPlaying(file)) {
Log_OC.d(TAG, "starting playback of " + file.getStoragePath());
mMediaServiceBinder.start(mAccount, file, mAutoplay, mSavedPlaybackPosition);
-
- } else {
+
+ }
+ else {
if (!mMediaServiceBinder.isPlaying() && mAutoplay) {
mMediaServiceBinder.start();
mMediaController.updatePausePlay();
Log_OC.d(TAG, "Successfully bound to MediaService, MediaController ready");
- } else {
+ }
+ else {
Log_OC.e(TAG, "Unexpected response from MediaService while binding");
}
}
@Override
public void onServiceDisconnected(ComponentName component) {
if (component.equals(new ComponentName(getActivity(), MediaService.class))) {
- Log_OC.e(TAG, "Media service suddenly disconnected");
+ Log_OC.w(TAG, "Media service suddenly disconnected");
if (mMediaController != null) {
mMediaController.setMediaPlayer(null);
- } else {
+ }
+ else {
Toast.makeText(
getActivity(),
"No media controller to release when disconnected from media service",
mMediaServiceConnection = null;
}
}
- }
+ }
-
/**
* Opens the previewed file with an external application.
mContainerActivity.getFileOperationsHelper().openFile(getFile());
finish();
}
-
+
/**
* Helper method to test if an {@link OCFile} can be passed to a {@link PreviewMediaFragment}
- * to be previewed.
- *
- * @param file File to test if can be previewed.
- * @return 'True' if the file can be handled by the fragment.
+ * to be previewed.
+ *
+ * @param file File to test if can be previewed.
+ * @return 'True' if the file can be handled by the fragment.
*/
public static boolean canBePreviewed(OCFile file) {
return (file != null && (file.isAudio() || file.isVideo()));
}
-
+
public void stopPreview(boolean stopAudio) {
OCFile file = getFile();
if (file.isAudio() && stopAudio) {
mMediaServiceBinder.pause();
-
- } else if (file.isVideo()) {
- mVideoPreview.stopPlayback();
+
+ }
+ else {
+ if (file.isVideo()) {
+ mVideoPreview.stopPlayback();
+ }
}
}
-
/**
* Finishes the preview
*/
if (mPrepared) {
mSavedPlaybackPosition = mVideoPreview.getCurrentPosition();
}
- Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition);
+ Log_OC.v(TAG, "getting position: " + mSavedPlaybackPosition);
return mSavedPlaybackPosition;
}
-
+
public boolean isPlaying() {
if (mPrepared) {
mAutoplay = mVideoPreview.isPlaying();
}
return mAutoplay;
}
-
+
}
--- /dev/null
+package com.owncloud.android.ui.preview;
+
+import android.accounts.Account;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.files.FileMenuFilter;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
+import com.owncloud.android.ui.dialog.LoadingDialog;
+import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
+import com.owncloud.android.ui.fragment.FileFragment;
+
+import java.io.BufferedWriter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.lang.ref.WeakReference;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Scanner;
+
+public class PreviewTextFragment extends FileFragment {
+ private static final String EXTRA_FILE = "FILE";
+ private static final String EXTRA_ACCOUNT = "ACCOUNT";
+ private static final String TAG = PreviewTextFragment.class.getSimpleName();
+
+ private Account mAccount;
+ private TextView mTextPreview;
+ private TextLoadAsyncTask mTextLoadTask;
+
+ /**
+ * Creates an empty fragment for previews.
+ * <p/>
+ * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically
+ * (for instance, when the device is turned a aside).
+ * <p/>
+ * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful
+ * construction
+ */
+ public PreviewTextFragment() {
+ super();
+ mAccount = null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ Log_OC.e(TAG, "onCreateView");
+
+
+ View ret = inflater.inflate(R.layout.text_file_preview, container, false);
+
+ mTextPreview = (TextView) ret.findViewById(R.id.text_preview);
+
+ return ret;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ OCFile file = getFile();
+
+ Bundle args = getArguments();
+
+ if (file == null) {
+ file = args.getParcelable(FileDisplayActivity.EXTRA_FILE);
+ }
+
+ if (mAccount == null) {
+ mAccount = args.getParcelable(FileDisplayActivity.EXTRA_ACCOUNT);
+ }
+
+ if (savedInstanceState == null) {
+ if (file == null) {
+ throw new IllegalStateException("Instanced with a NULL OCFile");
+ }
+ if (mAccount == null) {
+ throw new IllegalStateException("Instanced with a NULL ownCloud Account");
+ }
+ } else {
+ file = savedInstanceState.getParcelable(EXTRA_FILE);
+ mAccount = savedInstanceState.getParcelable(EXTRA_ACCOUNT);
+ }
+ setFile(file);
+ setHasOptionsMenu(true);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putParcelable(PreviewTextFragment.EXTRA_FILE, getFile());
+ outState.putParcelable(PreviewTextFragment.EXTRA_ACCOUNT, mAccount);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ Log_OC.e(TAG, "onStart");
+
+ loadAndShowTextPreview();
+ }
+
+ private void loadAndShowTextPreview() {
+ mTextLoadTask = new TextLoadAsyncTask(new WeakReference<TextView>(mTextPreview));
+ mTextLoadTask.execute(getFile().getStoragePath());
+ }
+
+
+ /**
+ * Reads the file to preview and shows its contents. Too critical to be anonymous.
+ */
+ private class TextLoadAsyncTask extends AsyncTask<Object, Void, StringWriter> {
+ private final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
+ private final WeakReference<TextView> mTextViewReference;
+
+ private TextLoadAsyncTask(WeakReference<TextView> textView) {
+ mTextViewReference = textView;
+ }
+
+
+ @Override
+ protected void onPreExecute() {
+ showLoadingDialog();
+ }
+
+ @Override
+ protected StringWriter doInBackground(java.lang.Object... params) {
+ if (params.length != 1) {
+ throw new IllegalArgumentException("The parameter to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location");
+ }
+ final String location = (String) params[0];
+
+ FileInputStream inputStream = null;
+ Scanner sc = null;
+ StringWriter source = new StringWriter();
+ BufferedWriter bufferedWriter = new BufferedWriter(source);
+ try {
+ inputStream = new FileInputStream(location);
+ sc = new Scanner(inputStream);
+ while (sc.hasNextLine()) {
+ bufferedWriter.append(sc.nextLine());
+ if (sc.hasNextLine()) bufferedWriter.append("\n");
+ }
+ bufferedWriter.close();
+ IOException exc = sc.ioException();
+ if (exc != null) throw exc;
+ } catch (IOException e) {
+ Log_OC.e(TAG, e.getMessage(), e);
+ finish();
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ Log_OC.e(TAG, e.getMessage(), e);
+ finish();
+ }
+ }
+ if (sc != null) {
+ sc.close();
+ }
+ }
+ return source;
+ }
+
+ @Override
+ protected void onPostExecute(final StringWriter stringWriter) {
+ final TextView textView = mTextViewReference.get();
+
+ if (textView != null) {
+ textView.setText(new String(stringWriter.getBuffer()));
+ textView.setVisibility(View.VISIBLE);
+ }
+
+ dismissLoadingDialog();
+ }
+
+ /**
+ * Show loading dialog
+ */
+ public void showLoadingDialog() {
+ // only once
+ Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
+ LoadingDialog loading = null;
+ if (frag == null) {
+ // Construct dialog
+ loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment));
+ FragmentManager fm = getActivity().getSupportFragmentManager();
+ FragmentTransaction ft = fm.beginTransaction();
+ loading.show(ft, DIALOG_WAIT_TAG);
+ } else {
+ loading = (LoadingDialog) frag;
+ loading.setShowsDialog(true);
+ }
+
+ }
+
+ /**
+ * Dismiss loading dialog
+ */
+ public void dismissLoadingDialog() {
+ final Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
+ if (frag != null) {
+ LoadingDialog loading = (LoadingDialog) frag;
+ loading.dismiss();
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.file_actions_menu, menu);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+
+ if (mContainerActivity.getStorageManager() != null) {
+ FileMenuFilter mf = new FileMenuFilter(
+ getFile(),
+ mContainerActivity.getStorageManager().getAccount(),
+ mContainerActivity,
+ getActivity()
+ );
+ mf.filter(menu);
+ }
+
+ // additional restriction for this fragment
+ MenuItem item = menu.findItem(R.id.action_rename_file);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ // additional restriction for this fragment
+ item = menu.findItem(R.id.action_move);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ // this one doesn't make sense since the file has to be down in order to be previewed
+ item = menu.findItem(R.id.action_download_file);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_sync_file);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_sync_account);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_switch_view);
+ if (item != null){
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+
+ item = menu.findItem(R.id.action_sort);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.action_share_file: {
+ mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
+ return true;
+ }
+ case R.id.action_open_file_with: {
+ openFile();
+ return true;
+ }
+ case R.id.action_remove_file: {
+ RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(getFile());
+ dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
+ return true;
+ }
+ case R.id.action_see_details: {
+ seeDetails();
+ return true;
+ }
+ case R.id.action_send_file: {
+ sendFile();
+ return true;
+ }
+ case R.id.action_sync_file: {
+ mContainerActivity.getFileOperationsHelper().syncFile(getFile());
+ return true;
+ }
+
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Update the file of the fragment with file value
+ *
+ * @param file The new file to set
+ */
+ public void updateFile(OCFile file) {
+ setFile(file);
+ }
+
+ private void sendFile() {
+ mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
+ }
+
+ private void seeDetails() {
+ mContainerActivity.showDetails(getFile());
+ }
+
+ @Override
+ public void onPause() {
+ Log_OC.e(TAG, "onPause");
+ super.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ Log_OC.e(TAG, "onResume");
+ }
+
+ @Override
+ public void onDestroy() {
+ Log_OC.e(TAG, "onDestroy");
+ super.onDestroy();
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ Log_OC.e(TAG, "onStop");
+ if (mTextLoadTask != null)
+ mTextLoadTask.cancel(Boolean.TRUE);
+ }
+
+ /**
+ * Opens the previewed file with an external application.
+ */
+ private void openFile() {
+ mContainerActivity.getFileOperationsHelper().openFile(getFile());
+ finish();
+ }
+
+ /**
+ * Helper method to test if an {@link OCFile} can be passed to a {@link PreviewTextFragment} to be previewed.
+ *
+ * @param file File to test if can be previewed.
+ * @return 'True' if the file can be handled by the fragment.
+ */
+ public static boolean canBePreviewed(OCFile file) {
+ final List<String> unsupportedTypes = new LinkedList<String>();
+ unsupportedTypes.add("text/richtext");
+ unsupportedTypes.add("text/rtf");
+ unsupportedTypes.add("text/vnd.abc");
+ unsupportedTypes.add("text/vnd.fmi.flexstor");
+ unsupportedTypes.add("text/vnd.rn-realtext");
+ unsupportedTypes.add("text/vnd.wap.wml");
+ unsupportedTypes.add("text/vnd.wap.wmlscript");
+ return (file != null && file.isDown() && file.isText() &&
+ !unsupportedTypes.contains(file.getMimetype()) &&
+ !unsupportedTypes.contains(file.getMimeTypeFromName())
+ );
+ }
+
+ /**
+ * Finishes the preview
+ */
+ private void finish() {
+ getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().onBackPressed();
+ }
+ });
+ }
+}
import com.owncloud.android.ui.activity.FileActivity;
import android.accounts.Account;
-import android.app.AlertDialog;
+import android.support.v7.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- Log_OC.e(TAG, "ACTIVITY\t\tonCreate");
+ Log_OC.v(TAG, "onCreate");
setContentView(R.layout.video_layout);
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- Log_OC.e(TAG, "ACTIVITY\t\tonSaveInstanceState");
outState.putInt(PreviewVideoActivity.EXTRA_START_POSITION, mVideoPlayer.getCurrentPosition());
outState.putBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY , mVideoPlayer.isPlaying());
}
@Override
public void onBackPressed() {
- Log_OC.e(TAG, "ACTIVTIY\t\tonBackPressed");
+ Log_OC.v(TAG, "onBackPressed");
Intent i = new Intent();
i.putExtra(EXTRA_AUTOPLAY, mVideoPlayer.isPlaying());
i.putExtra(EXTRA_START_POSITION, mVideoPlayer.getCurrentPosition());
*/
@Override
public void onPrepared(MediaPlayer mp) {
- Log_OC.e(TAG, "ACTIVITY\t\tonPrepare");
+ Log_OC.v(TAG, "onPrepare");
mVideoPlayer.seekTo(mSavedPlaybackPosition);
if (mAutoplay) {
mVideoPlayer.start();
file = getStorageManager().getFileById(file.getFileId());
if (file != null) {
if (file.isDown()) {
- mVideoPlayer.setVideoPath(file.getStoragePath());
-
+ mVideoPlayer.setVideoURI(file.getStorageUri());
+
} else {
- // not working yet
String url;
- try {
- url = AccountUtils.constructFullURLForAccount(this, getAccount()) + file.getRemotePath();
- mVideoPlayer.setVideoURI(Uri.parse(url));
- } catch (AccountNotFoundException e) {
- onError(null, MediaService.OC_MEDIA_ERROR, R.string.media_err_no_account);
- }
+ url = PreviewMediaFragment.generateUrlWithCredentials(getAccount(), getApplicationContext(), getFile());
+ mVideoPlayer.setVideoURI(Uri.parse(url));
}
-
+
// create and prepare control panel for the user
mMediaController = new MediaController(this);
mMediaController.setMediaPlayer(mVideoPlayer);
mMediaController.setAnchorView(mVideoPlayer);
mVideoPlayer.setMediaController(mMediaController);
-
+
} else {
finish();
}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author Andy Scherzinger
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.utils;
+
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.view.ActionProvider;
+import android.view.ContextMenu;
+import android.view.MenuItem;
+import android.view.SubMenu;
+import android.view.View;
+
+/**
+ * Created by scherzia on 17.08.2015.
+ */
+public class DialogMenuItem implements MenuItem {
+ int mItemId;
+ CharSequence mTitle;
+
+ public DialogMenuItem(int itemId) {
+ this.mItemId = itemId;
+ }
+
+ @Override
+ public int getItemId() {
+ return mItemId;
+ }
+
+ @Override
+ public int getGroupId() {
+ return 0;
+ }
+
+ @Override
+ public int getOrder() {
+ return 0;
+ }
+
+ @Override
+ public MenuItem setTitle(CharSequence title) {
+ this.mTitle = title;
+ return this;
+ }
+
+ @Override
+ public MenuItem setTitle(int title) {
+ return this;
+ }
+
+ @Override
+ public CharSequence getTitle() {
+ return this.mTitle;
+ }
+
+ @Override
+ public MenuItem setTitleCondensed(CharSequence title) {
+ return null;
+ }
+
+ @Override
+ public CharSequence getTitleCondensed() {
+ return null;
+ }
+
+ @Override
+ public MenuItem setIcon(Drawable icon) {
+ return null;
+ }
+
+ @Override
+ public MenuItem setIcon(int iconRes) {
+ return null;
+ }
+
+ @Override
+ public Drawable getIcon() {
+ return null;
+ }
+
+ @Override
+ public MenuItem setIntent(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public Intent getIntent() {
+ return null;
+ }
+
+ @Override
+ public MenuItem setShortcut(char numericChar, char alphaChar) {
+ return null;
+ }
+
+ @Override
+ public MenuItem setNumericShortcut(char numericChar) {
+ return null;
+ }
+
+ @Override
+ public char getNumericShortcut() {
+ return 0;
+ }
+
+ @Override
+ public MenuItem setAlphabeticShortcut(char alphaChar) {
+ return null;
+ }
+
+ @Override
+ public char getAlphabeticShortcut() {
+ return 0;
+ }
+
+ @Override
+ public MenuItem setCheckable(boolean checkable) {
+ return null;
+ }
+
+ @Override
+ public boolean isCheckable() {
+ return false;
+ }
+
+ @Override
+ public MenuItem setChecked(boolean checked) {
+ return null;
+ }
+
+ @Override
+ public boolean isChecked() {
+ return false;
+ }
+
+ @Override
+ public MenuItem setVisible(boolean visible) {
+ return null;
+ }
+
+ @Override
+ public boolean isVisible() {
+ return false;
+ }
+
+ @Override
+ public MenuItem setEnabled(boolean enabled) {
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean hasSubMenu() {
+ return false;
+ }
+
+ @Override
+ public SubMenu getSubMenu() {
+ return null;
+ }
+
+ @Override
+ public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
+ return null;
+ }
+
+ @Override
+ public ContextMenu.ContextMenuInfo getMenuInfo() {
+ return null;
+ }
+
+ @Override
+ public void setShowAsAction(int actionEnum) {
+
+ }
+
+ @Override
+ public MenuItem setShowAsActionFlags(int actionEnum) {
+ return null;
+ }
+
+ @Override
+ public MenuItem setActionView(View view) {
+ return null;
+ }
+
+ @Override
+ public MenuItem setActionView(int resId) {
+ return null;
+ }
+
+ @Override
+ public View getActionView() {
+ return null;
+ }
+
+ @Override
+ public MenuItem setActionProvider(ActionProvider actionProvider) {
+ return null;
+ }
+
+ @Override
+ public ActionProvider getActionProvider() {
+ return null;
+ }
+
+ @Override
+ public boolean expandActionView() {
+ return false;
+ }
+
+ @Override
+ public boolean collapseActionView() {
+ return false;
+ }
+
+ @Override
+ public boolean isActionViewExpanded() {
+ return false;
+ }
+
+ @Override
+ public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {
+ return null;
+ }
+}
\r
package com.owncloud.android.utils;\r
\r
+import java.io.File;\r
import java.net.IDN;\r
import java.text.DateFormat;\r
import java.util.Arrays;\r
import android.annotation.TargetApi;\r
import android.app.Activity;\r
import android.content.Context;\r
+import android.content.SharedPreferences;\r
import android.graphics.Point;\r
+import android.graphics.PorterDuff;\r
import android.os.Build;\r
import android.text.format.DateUtils;\r
import android.view.Display;\r
-import android.webkit.MimeTypeMap;\r
+import android.widget.ProgressBar;\r
+import android.widget.SeekBar;\r
\r
import com.owncloud.android.MainApp;\r
import com.owncloud.android.R;\r
+import com.owncloud.android.datamodel.FileDataStorageManager;\r
import com.owncloud.android.datamodel.OCFile;\r
\r
+import java.math.BigDecimal;\r
+import java.net.IDN;\r
+import java.text.DateFormat;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
/**\r
* A helper class for some string operations.\r
*/\r
public class DisplayUtils {\r
\r
private static final String OWNCLOUD_APP_NAME = "ownCloud";\r
-\r
- //private static String TAG = DisplayUtils.class.getSimpleName(); \r
\r
private static final String[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };\r
+ private static final int[] sizeScales = { 0, 0, 0, 1, 1, 2, 2, 2, 2 };\r
+\r
+ private static Map<String, String> mimeType2HumanReadable;\r
\r
- private static HashMap<String, String> mimeType2HUmanReadable;\r
static {\r
- mimeType2HUmanReadable = new HashMap<String, String>();\r
+ mimeType2HumanReadable = new HashMap<String, String>();\r
// images\r
- mimeType2HUmanReadable.put("image/jpeg", "JPEG image");\r
- mimeType2HUmanReadable.put("image/jpg", "JPEG image");\r
- mimeType2HUmanReadable.put("image/png", "PNG image");\r
- mimeType2HUmanReadable.put("image/bmp", "Bitmap image");\r
- mimeType2HUmanReadable.put("image/gif", "GIF image");\r
- mimeType2HUmanReadable.put("image/svg+xml", "JPEG image");\r
- mimeType2HUmanReadable.put("image/tiff", "TIFF image");\r
+ mimeType2HumanReadable.put("image/jpeg", "JPEG image");\r
+ mimeType2HumanReadable.put("image/jpg", "JPEG image");\r
+ mimeType2HumanReadable.put("image/png", "PNG image");\r
+ mimeType2HumanReadable.put("image/bmp", "Bitmap image");\r
+ mimeType2HumanReadable.put("image/gif", "GIF image");\r
+ mimeType2HumanReadable.put("image/svg+xml", "JPEG image");\r
+ mimeType2HumanReadable.put("image/tiff", "TIFF image");\r
// music\r
- mimeType2HUmanReadable.put("audio/mpeg", "MP3 music file");\r
- mimeType2HUmanReadable.put("application/ogg", "OGG music file");\r
-\r
+ mimeType2HumanReadable.put("audio/mpeg", "MP3 music file");\r
+ mimeType2HumanReadable.put("application/ogg", "OGG music file");\r
}\r
\r
- private static final String TYPE_APPLICATION = "application";\r
- private static final String TYPE_AUDIO = "audio";\r
- private static final String TYPE_IMAGE = "image";\r
- private static final String TYPE_TXT = "text";\r
- private static final String TYPE_VIDEO = "video";\r
- \r
- private static final String SUBTYPE_PDF = "pdf";\r
- private static final String SUBTYPE_XML = "xml";\r
- private static final String[] SUBTYPES_DOCUMENT = { \r
- "msword",\r
- "vnd.openxmlformats-officedocument.wordprocessingml.document",\r
- "vnd.oasis.opendocument.text",\r
- "rtf",\r
- "javascript"\r
- };\r
- private static Set<String> SUBTYPES_DOCUMENT_SET = new HashSet<String>(Arrays.asList(SUBTYPES_DOCUMENT));\r
- private static final String[] SUBTYPES_SPREADSHEET = {\r
- "msexcel",\r
- "vnd.ms-excel",\r
- "vnd.openxmlformats-officedocument.spreadsheetml.sheet",\r
- "vnd.oasis.opendocument.spreadsheet"\r
- };\r
- private static Set<String> SUBTYPES_SPREADSHEET_SET = new HashSet<String>(Arrays.asList(SUBTYPES_SPREADSHEET));\r
- private static final String[] SUBTYPES_PRESENTATION = { \r
- "mspowerpoint",\r
- "vnd.ms-powerpoint",\r
- "vnd.openxmlformats-officedocument.presentationml.presentation",\r
- "vnd.oasis.opendocument.presentation"\r
- };\r
- private static Set<String> SUBTYPES_PRESENTATION_SET = new HashSet<String>(Arrays.asList(SUBTYPES_PRESENTATION));\r
- private static final String[] SUBTYPES_COMPRESSED = {"x-tar", "x-gzip", "zip"};\r
- private static final Set<String> SUBTYPES_COMPRESSED_SET = new HashSet<String>(Arrays.asList(SUBTYPES_COMPRESSED));\r
- private static final String SUBTYPE_OCTET_STREAM = "octet-stream";\r
- private static final String EXTENSION_RAR = "rar";\r
- private static final String EXTENSION_RTF = "rtf";\r
- private static final String EXTENSION_3GP = "3gp";\r
- private static final String EXTENSION_PY = "py";\r
- private static final String EXTENSION_JS = "js";\r
- \r
/**\r
* Converts the file size in bytes to human readable output.\r
- * \r
+ * <ul>\r
+ * <li>appends a size suffix, e.g. B, KB, MB etc.</li>\r
+ * <li>rounds the size based on the suffix to 0,1 or 2 decimals</li>\r
+ * </ul>\r
+ *\r
* @param bytes Input file size\r
* @return Like something readable like "12 MB"\r
*/\r
public static String bytesToHumanReadable(long bytes) {\r
double result = bytes;\r
- int attachedsuff = 0;\r
- while (result > 1024 && attachedsuff < sizeSuffixes.length) {\r
+ int attachedSuff = 0;\r
+ while (result > 1024 && attachedSuff < sizeSuffixes.length) {\r
result /= 1024.;\r
- attachedsuff++;\r
+ attachedSuff++;\r
}\r
- result = ((int) (result * 100)) / 100.;\r
- return result + " " + sizeSuffixes[attachedsuff];\r
+\r
+ return new BigDecimal(result).setScale(\r
+ sizeScales[attachedSuff], BigDecimal.ROUND_HALF_UP) + " " + sizeSuffixes[attachedSuff];\r
}\r
\r
/**\r
* @return A human friendly version of the MIME type\r
*/\r
public static String convertMIMEtoPrettyPrint(String mimetype) {\r
- if (mimeType2HUmanReadable.containsKey(mimetype)) {\r
- return mimeType2HUmanReadable.get(mimetype);\r
+ if (mimeType2HumanReadable.containsKey(mimetype)) {\r
+ return mimeType2HumanReadable.get(mimetype);\r
}\r
if (mimetype.split("/").length >= 2)\r
return mimetype.split("/")[1].toUpperCase() + " file";\r
return "Unknown type";\r
}\r
- \r
- \r
- /**\r
- * Returns the resource identifier of an image to use as icon associated to a known MIME type.\r
- * \r
- * @param mimetype MIME type string; if NULL, the method tries to guess it from the extension in filename\r
- * @param filename Name, with extension.\r
- * @return Identifier of an image resource.\r
- */\r
- public static int getFileTypeIconId(String mimetype, String filename) {\r
-\r
- if (mimetype == null) {\r
- String fileExtension = getExtension(filename);\r
- mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);\r
- if (mimetype == null) {\r
- mimetype = TYPE_APPLICATION + "/" + SUBTYPE_OCTET_STREAM;\r
- }\r
- } \r
- \r
- if ("DIR".equals(mimetype)) {\r
- return R.drawable.ic_menu_archive;\r
-\r
- } else {\r
- String [] parts = mimetype.split("/");\r
- String type = parts[0];\r
- String subtype = (parts.length > 1) ? parts[1] : "";\r
- \r
- if(TYPE_TXT.equals(type)) {\r
- return R.drawable.file_doc;\r
- \r
- } else if(TYPE_IMAGE.equals(type)) {\r
- return R.drawable.file_image;\r
- \r
- } else if(TYPE_VIDEO.equals(type)) {\r
- return R.drawable.file_movie;\r
- \r
- } else if(TYPE_AUDIO.equals(type)) { \r
- return R.drawable.file_sound;\r
- \r
- } else if(TYPE_APPLICATION.equals(type)) {\r
- \r
- if (SUBTYPE_PDF.equals(subtype)) {\r
- return R.drawable.file_pdf;\r
- \r
- } else if (SUBTYPE_XML.equals(subtype)) {\r
- return R.drawable.file_doc;\r
-\r
- } else if (SUBTYPES_DOCUMENT_SET.contains(subtype)) {\r
- return R.drawable.file_doc;\r
-\r
- } else if (SUBTYPES_SPREADSHEET_SET.contains(subtype)) {\r
- return R.drawable.file_xls;\r
-\r
- } else if (SUBTYPES_PRESENTATION_SET.contains(subtype)) {\r
- return R.drawable.file_ppt;\r
-\r
- } else if (SUBTYPES_COMPRESSED_SET.contains(subtype)) {\r
- return R.drawable.file_zip;\r
-\r
- } else if (SUBTYPE_OCTET_STREAM.equals(subtype) ) {\r
- if (getExtension(filename).equalsIgnoreCase(EXTENSION_RAR)) {\r
- return R.drawable.file_zip;\r
- \r
- } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_RTF)) {\r
- return R.drawable.file_doc;\r
- \r
- } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_3GP)) {\r
- return R.drawable.file_movie;\r
- \r
- } else if ( getExtension(filename).equalsIgnoreCase(EXTENSION_PY) ||\r
- getExtension(filename).equalsIgnoreCase(EXTENSION_JS)) {\r
- return R.drawable.file_doc;\r
- } \r
- } \r
- }\r
- }\r
-\r
- // default icon\r
- return R.drawable.file;\r
- }\r
\r
- \r
- private static String getExtension(String filename) {\r
- String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();\r
- return extension;\r
- }\r
- \r
/**\r
* Converts Unix time to human readable format\r
* @param milliseconds that have passed since 01/01/1970\r
return df.format(date);\r
}\r
\r
- \r
public static int getSeasonalIconId() {\r
if (Calendar.getInstance().get(Calendar.DAY_OF_YEAR) >= 354 &&\r
MainApp.getAppContext().getString(R.string.app_name).equals(OWNCLOUD_APP_NAME)) {\r
return fileExtension;\r
}\r
\r
+ public static CharSequence getRelativeTimestamp(Context context, OCFile file) {\r
+ return getRelativeDateTimeString(context, file.getModificationTimestamp(),\r
+ DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);\r
+ }\r
+\r
@SuppressWarnings("deprecation")\r
- public static CharSequence getRelativeDateTimeString (\r
+ private static CharSequence getRelativeDateTimeString (\r
Context c, long time, long minResolution, long transitionResolution, int flags\r
){\r
\r
else if ((System.currentTimeMillis() - time) < 60 * 1000) {\r
return c.getString(R.string.file_list_seconds_ago);\r
} else {\r
- // Workaround 2.x bug (see https://github.com/owncloud/android/issues/716)\r
- if ( Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && \r
- (System.currentTimeMillis() - time) > 24 * 60 * 60 * 1000 ) {\r
- Date date = new Date(time);\r
- date.setHours(0);\r
- date.setMinutes(0);\r
- date.setSeconds(0);\r
- dateString = DateUtils.getRelativeDateTimeString(\r
- c, date.getTime(), minResolution, transitionResolution, flags\r
- );\r
- } else {\r
- dateString = DateUtils.getRelativeDateTimeString(c, time, minResolution, transitionResolution, flags);\r
+ dateString = DateUtils.getRelativeDateTimeString(c, time, minResolution, transitionResolution, flags);\r
+ }\r
+\r
+ String[] parts = dateString.toString().split(",");\r
+ if (parts.length == 2) {\r
+ if (parts[1].contains(":") && !parts[0].contains(":")) {\r
+ return parts[0];\r
+ } else if (parts[0].contains(":") && !parts[1].contains(":")) {\r
+ return parts[1];\r
}\r
}\r
- \r
- return dateString.toString().split(",")[0];\r
+ //dateString contains unexpected format. fallback: use relative date time string from android api as is.\r
+ return dateString.toString();\r
}\r
\r
/**\r
return size;\r
}\r
\r
+ /**\r
+ * Determines if user set folder to grid or list view. If folder is not set itself,\r
+ * it finds a parent that is set (at least root is set).\r
+ * @param file\r
+ * @param storageManager\r
+ * @return\r
+ */\r
+ public static boolean isGridView(OCFile file, FileDataStorageManager storageManager){\r
+ if (file != null) {\r
+ OCFile fileToTest = file;\r
+ OCFile parentDir = null;\r
+ String parentPath = null;\r
+\r
+ SharedPreferences setting = MainApp.getAppContext().getSharedPreferences(\r
+ "viewMode", Context.MODE_PRIVATE);\r
+\r
+ if (setting.contains(fileToTest.getRemoteId())) {\r
+ return setting.getBoolean(fileToTest.getRemoteId(), false);\r
+ } else {\r
+ do {\r
+ if (fileToTest.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) {\r
+ parentPath = new File(fileToTest.getRemotePath()).getParent();\r
+ parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :\r
+ parentPath + OCFile.PATH_SEPARATOR;\r
+ parentDir = storageManager.getFileByPath(parentPath);\r
+ } else {\r
+ parentDir = storageManager.getFileByPath(OCFile.ROOT_PATH);\r
+ }\r
+\r
+ while (parentDir == null) {\r
+ parentPath = new File(parentPath).getParent();\r
+ parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :\r
+ parentPath + OCFile.PATH_SEPARATOR;\r
+ parentDir = storageManager.getFileByPath(parentPath);\r
+ }\r
+ fileToTest = parentDir;\r
+ } while (endWhile(parentDir, setting));\r
+ return setting.getBoolean(fileToTest.getRemoteId(), false);\r
+ }\r
+ } else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ private static boolean endWhile(OCFile parentDir, SharedPreferences setting) {\r
+ if (parentDir.getRemotePath().compareToIgnoreCase(OCFile.ROOT_PATH) == 0) {\r
+ return false;\r
+ } else {\r
+ return !setting.contains(parentDir.getRemoteId());\r
+ }\r
+ }\r
+\r
+ public static void setViewMode(OCFile file, boolean setGrid){\r
+ SharedPreferences setting = MainApp.getAppContext().getSharedPreferences(\r
+ "viewMode", Context.MODE_PRIVATE);\r
+\r
+ SharedPreferences.Editor editor = setting.edit();\r
+ editor.putBoolean(file.getRemoteId(), setGrid);\r
+ editor.commit();\r
+ }\r
+\r
+ /**\r
+ * sets the coloring of the given progress bar to color_accent.\r
+ *\r
+ * @param progressBar the progress bar to be colored\r
+ */\r
+ public static void colorPreLollipopHorizontalProgressBar(ProgressBar progressBar) {\r
+ if (progressBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {\r
+ int color = progressBar.getResources().getColor(R.color.color_accent);\r
+ progressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);\r
+ progressBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * sets the coloring of the given seek bar to color_accent.\r
+ *\r
+ * @param seekBar the seek bar to be colored\r
+ */\r
+ public static void colorPreLollipopHorizontalSeekBar(SeekBar seekBar) {\r
+ if (seekBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {\r
+ colorPreLollipopHorizontalProgressBar(seekBar);\r
+\r
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\r
+ int color = seekBar.getResources().getColor(R.color.color_accent);\r
+ seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);\r
+ seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);\r
+ }\r
+ }\r
+ }\r
}\r
package com.owncloud.android.utils;
-import java.io.File;
-import java.net.SocketTimeoutException;
-
-import org.apache.commons.httpclient.ConnectTimeoutException;
-
import android.content.res.Resources;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation;
+import com.owncloud.android.operations.CopyFileOperation;
import com.owncloud.android.operations.CreateFolderOperation;
-import com.owncloud.android.operations.CreateShareOperation;
+import com.owncloud.android.operations.CreateShareViaLinkOperation;
+import com.owncloud.android.operations.CreateShareWithShareeOperation;
import com.owncloud.android.operations.DownloadFileOperation;
import com.owncloud.android.operations.MoveFileOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
import com.owncloud.android.operations.SynchronizeFolderOperation;
-import com.owncloud.android.operations.UnshareLinkOperation;
+import com.owncloud.android.operations.UnshareOperation;
+import com.owncloud.android.operations.UpdateShareViaLinkOperation;
import com.owncloud.android.operations.UploadFileOperation;
+import org.apache.commons.httpclient.ConnectTimeoutException;
+
+import java.io.File;
+import java.net.SocketTimeoutException;
+
/**
* Class to choose proper error messages to show to the user depending on the results of operations,
* always following the same policy
public class ErrorMessageAdapter {
public ErrorMessageAdapter() {
-
+
}
public static String getErrorCauseMessage(RemoteOperationResult result,
RemoteOperation operation, Resources res) {
String message = null;
-
- if (operation instanceof UploadFileOperation) {
-
+
+ if (!result.isSuccess() && isNetworkError(result.getCode())) {
+ message = getErrorMessage(result, res);
+
+ } else if (operation instanceof UploadFileOperation) {
+
if (result.isSuccess()) {
message = String.format(
res.getString(R.string.uploader_upload_succeeded_content_single),
} else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) {
message = res.getString(R.string.failed_upload_quota_exceeded_text);
*/
-
+
} else if (result.getCode() == ResultCode.FORBIDDEN) {
message = String.format(res.getString(R.string.forbidden_permissions),
res.getString(R.string.uploader_upload_forbidden_permissions));
((UploadFileOperation) operation).getFileName());
}
}
-
+
} else if (operation instanceof DownloadFileOperation) {
-
+
if (result.isSuccess()) {
message = String.format(
res.getString(R.string.downloader_download_succeeded_content),
new File(((DownloadFileOperation) operation).getSavePath()).getName());
-
+
} else {
if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
message = res.getString(R.string.downloader_download_file_not_found);
((DownloadFileOperation) operation).getSavePath()).getName());
}
}
-
+
} else if (operation instanceof RemoveFileOperation) {
if (result.isSuccess()) {
message = res.getString(R.string.remove_success_msg);
-
+
} else {
if (result.getCode().equals(ResultCode.FORBIDDEN)) {
// Error --> No permissions
message = String.format(res.getString(R.string.forbidden_permissions),
res.getString(R.string.forbidden_permissions_delete));
- } else if (isNetworkError(result.getCode())) {
- message = getErrorMessage(result, res);
-
} else {
message = res.getString(R.string.remove_fail_msg);
}
} else if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) {
message = res.getString(R.string.filename_forbidden_characters);
- } else if (isNetworkError(result.getCode())) {
- message = getErrorMessage(result, res);
-
} else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) {
message = res.getString(R.string.filename_forbidden_charaters_from_server);
} else {
- message = res.getString(R.string.rename_server_fail_msg);
+ message = res.getString(R.string.rename_server_fail_msg);
}
-
+
} else if (operation instanceof SynchronizeFileOperation) {
if (!((SynchronizeFileOperation) operation).transferWasRequested()) {
message = res.getString(R.string.sync_file_nothing_to_do_msg);
}
-
+
} else if (operation instanceof CreateFolderOperation) {
if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) {
message = res.getString(R.string.filename_forbidden_characters);
message = String.format(res.getString(R.string.forbidden_permissions),
res.getString(R.string.forbidden_permissions_create));
- } else if (isNetworkError(result.getCode())) {
- message = getErrorMessage(result, res);
-
} else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) {
message = res.getString(R.string.filename_forbidden_charaters_from_server);
} else {
message = res.getString(R.string.create_dir_fail_msg);
}
- } else if (operation instanceof CreateShareOperation) {
- if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND
+ } else if (operation instanceof CreateShareViaLinkOperation ||
+ operation instanceof CreateShareWithShareeOperation) {
+
+ if (result.getData() != null && result.getData().size() > 0) {
+ message = (String) result.getData().get(0); // share API sends its own error messages
+
+ } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
message = res.getString(R.string.share_link_file_no_exist);
-
+
} else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
// Error --> No permissions
message = String.format(res.getString(R.string.forbidden_permissions),
res.getString(R.string.share_link_forbidden_permissions));
- } else if (isNetworkError(result.getCode())) {
- message = getErrorMessage(result, res);
-
} else { // Generic error
// Show a Message, operation finished without success
message = res.getString(R.string.share_link_file_error);
}
-
- } else if (operation instanceof UnshareLinkOperation) {
-
- if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND
+
+ } else if (operation instanceof UnshareOperation) {
+
+ if (result.getData() != null && result.getData().size() > 0) {
+ message = (String) result.getData().get(0); // share API sends its own error messages
+
+ } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
message = res.getString(R.string.unshare_link_file_no_exist);
-
+
} else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
// Error --> No permissions
message = String.format(res.getString(R.string.forbidden_permissions),
res.getString(R.string.unshare_link_forbidden_permissions));
- } else if (isNetworkError(result.getCode())) {
- message = getErrorMessage(result, res);
-
} else { // Generic error
// Show a Message, operation finished without success
message = res.getString(R.string.unshare_link_file_error);
}
+
+ } else if (operation instanceof UpdateShareViaLinkOperation) {
+
+ if (result.getData() != null && result.getData().size() > 0) {
+ message = (String) result.getData().get(0); // share API sends its own error messages
+
+ } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
+ message = res.getString(R.string.update_link_file_no_exist);
+
+ } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
+ // Error --> No permissions
+ message = String.format(res.getString(R.string.forbidden_permissions),
+ res.getString(R.string.update_link_forbidden_permissions));
+
+ } else { // Generic error
+ // Show a Message, operation finished without success
+ message = res.getString(R.string.update_link_file_error);
+ }
+
} else if (operation instanceof MoveFileOperation) {
if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
message = res.getString(R.string.move_file_not_found);
-
- } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) {
+ } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) {
message = res.getString(R.string.move_file_invalid_into_descendent);
} else if (result.getCode() == ResultCode.INVALID_OVERWRITE) {
} else { // Generic error
// Show a Message, operation finished without success
- message = String.format(res.getString(R.string.download_folder_failed_content),
+ message = String.format(res.getString(R.string.sync_folder_failed_content),
folderPathName);
}
}
+ } else if (operation instanceof CopyFileOperation) {
+ if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
+ message = res.getString(R.string.copy_file_not_found);
+ } else if (result.getCode() == ResultCode.INVALID_COPY_INTO_DESCENDANT) {
+ message = res.getString(R.string.copy_file_invalid_into_descendent);
+
+ } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) {
+ message = res.getString(R.string.copy_file_invalid_overwrite);
+
+ } else if (result.getCode() == ResultCode.FORBIDDEN) {
+ message = String.format(res.getString(R.string.forbidden_permissions),
+ res.getString(R.string.forbidden_permissions_copy));
+
+ } else { // Generic error
+ // Show a Message, operation finished without success
+ message = res.getString(R.string.copy_file_error);
+ }
}
-
+
return message;
}
-
- private static String getErrorMessage(RemoteOperationResult result , Resources res) {
-
+
+ private static String getErrorMessage(RemoteOperationResult result, Resources res) {
+
String message = null;
-
+
if (!result.isSuccess()) {
-
+
if (result.getCode() == ResultCode.WRONG_CONNECTION) {
message = res.getString(R.string.network_error_socket_exception);
-
+
} else if (result.getCode() == ResultCode.TIMEOUT) {
message = res.getString(R.string.network_error_socket_exception);
-
+
if (result.getException() instanceof SocketTimeoutException) {
message = res.getString(R.string.network_error_socket_timeout_exception);
- } else if(result.getException() instanceof ConnectTimeoutException) {
+ } else if (result.getException() instanceof ConnectTimeoutException) {
message = res.getString(R.string.network_error_connect_timeout_exception);
- }
-
+ }
+
} else if (result.getCode() == ResultCode.HOST_NOT_AVAILABLE) {
message = res.getString(R.string.network_host_not_available);
}
}
-
+
return message;
}
-
+
private static boolean isNetworkError(RemoteOperationResult.ResultCode code) {
- if (code == ResultCode.WRONG_CONNECTION ||
- code == ResultCode.TIMEOUT ||
+ if (code == ResultCode.WRONG_CONNECTION ||
+ code == ResultCode.TIMEOUT ||
code == ResultCode.HOST_NOT_AVAILABLE) {
return true;
- }
- else
+ } else
return false;
}
}
--- /dev/null
+package com.owncloud.android.utils;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.ui.activity.ErrorReportActivity;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+// from https://stackoverflow.com/questions/23486627/catching-error-and-user-information#answer-23486834
+public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
+
+ Context context;
+ private final String LINE_SEPARATOR = "\n";
+
+ public ExceptionHandler() {
+ // TODO Auto-generated constructor stub
+ context = MainApp.getAppContext();
+ }
+
+ @Override
+ public void uncaughtException(Thread arg0, Throwable arg1) {
+ // TODO Auto-generated method stub
+
+ StringWriter stackTrace = new StringWriter();
+ arg1.printStackTrace(new PrintWriter(stackTrace));
+ final StringBuilder errorReport = new StringBuilder();
+ errorReport.append("************ CAUSE OF ERROR ************\n\n");
+ errorReport.append(stackTrace.toString());
+
+ errorReport.append("\n************ DEVICE INFORMATION ***********\n");
+ errorReport.append("Brand: ");
+ errorReport.append(Build.BRAND);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("Device: ");
+ errorReport.append(Build.DEVICE);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("Model: ");
+ errorReport.append(Build.MODEL);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("Id: ");
+ errorReport.append(Build.ID);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("Product: ");
+ errorReport.append(Build.PRODUCT);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("\n************ FIRMWARE ************\n");
+ errorReport.append("SDK: ");
+ errorReport.append(Build.VERSION.SDK);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("Release: ");
+ errorReport.append(Build.VERSION.RELEASE);
+ errorReport.append(LINE_SEPARATOR);
+ errorReport.append("Incremental: ");
+ errorReport.append(Build.VERSION.INCREMENTAL);
+ errorReport.append(LINE_SEPARATOR);
+
+
+ //after this you can do whatever you want , like i start an activity and show error log there
+
+ if (isUIThread()) {
+ invokeLogActivity(errorReport);
+ } else { //handle non UI thread throw uncaught exception
+
+ new Handler(Looper.getMainLooper()).post(new Runnable() {
+ @Override
+ public void run() {
+ invokeLogActivity(errorReport);
+ }
+ });
+ }
+ }
+ private void invokeLogActivity(StringBuilder errorReport){
+// Intent sendIntent = new Intent();
+// sendIntent.setAction(Intent.ACTION_SEND);
+// sendIntent.putExtra(Intent.EXTRA_TEXT, errorReport.toString());
+// sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+// sendIntent.setType("text/plain");
+// context.startActivity(sendIntent);
+
+ Intent sendIntent = new Intent(context, ErrorReportActivity.class);
+ sendIntent.putExtra(Intent.EXTRA_TEXT, errorReport.toString());
+ sendIntent.setAction(Intent.ACTION_SEND);
+ sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ sendIntent.setType("text/plain");
+ context.startActivity(sendIntent);
+
+
+ System.exit(1);
+// android.os.Process.killProcess(android.os.Process.myPid());
+
+ }
+
+ private boolean isUIThread(){
+ return Looper.getMainLooper().getThread() == Thread.currentThread();
+ }
+}
\ No newline at end of file
package com.owncloud.android.utils;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.Collections;
import java.util.Comparator;
+import java.util.List;
import java.util.Vector;
import third_parties.daveKoeller.AlphanumComparator;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.resources.files.RemoteFile;
+import android.accounts.Account;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.net.Uri;
-import android.os.Environment;
import android.os.StatFs;
import android.webkit.MimeTypeMap;
* Static methods to help in access to local file system.
*/
public class FileStorageUtils {
- public static Integer mSortOrder;
- public static Boolean mSortAscending;
public static final Integer SORT_NAME = 0;
public static final Integer SORT_DATE = 1;
public static final Integer SORT_SIZE = 2;
-
-
- //private static final String LOG_TAG = "FileStorageUtils";
+ public static Integer mSortOrder = SORT_NAME;
+ public static Boolean mSortAscending = true;
+
public static final String getSavePath(String accountName) {
- File sdCard = Environment.getExternalStorageDirectory();
- return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/" + Uri.encode(accountName, "@");
+// File sdCard = Environment.getExternalStorageDirectory();
+
+ return MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + Uri.encode(accountName, "@");
// URL encoding is an 'easy fix' to overcome that NTFS and FAT32 don't allow ":" in file names, that can be in the accountName since 0.1.190B
}
}
public static final String getTemporalPath(String accountName) {
- File sdCard = Environment.getExternalStorageDirectory();
- return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/tmp/" + Uri.encode(accountName, "@");
+ return MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + "tmp" + File.separator + Uri.encode(accountName, "@");
// URL encoding is an 'easy fix' to overcome that NTFS and FAT32 don't allow ":" in file names, that can be in the accountName since 0.1.190B
}
@SuppressLint("NewApi")
public static final long getUsableSpace(String accountName) {
- File savePath = Environment.getExternalStorageDirectory();
+ File savePath = new File(MainApp.getStoragePath());
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
return savePath.getUsableSpace();
}
public static final String getLogPath() {
- return Environment.getExternalStorageDirectory() + File.separator + MainApp.getDataFolder() + File.separator + "log";
+ return MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + "log";
}
public static String getInstantUploadFilePath(Context context, String fileName) {
* 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).
- * @return New OCFile instance representing the remote resource described by we.
+ * @return New OCFile instance representing the remote resource described by remote.
*/
public static OCFile fillOCFile(RemoteFile remote) {
OCFile file = new OCFile(remote.getRemotePath());
/**
* Sorts all filenames, regarding last user decision
*/
- public static Vector<OCFile> sortFolder(Vector<OCFile> files){
+ public static Vector<OCFile> sortOcFolder(Vector<OCFile> files){
switch (mSortOrder){
case 0:
- files = FileStorageUtils.sortByName(files);
+ files = FileStorageUtils.sortOCFilesByName(files);
break;
case 1:
- files = FileStorageUtils.sortByDate(files);
+ files = FileStorageUtils.sortOCFilesByDate(files);
break;
case 2:
// mFiles = FileStorageUtils.sortBySize(mSortAscending);
return files;
}
+
+ /**
+ * Sorts all filenames, regarding last user decision
+ */
+ public static File[] sortLocalFolder(File[] files){
+ switch (mSortOrder){
+ case 0:
+ files = FileStorageUtils.sortLocalFilesByName(files);
+ break;
+ case 1:
+ files = FileStorageUtils.sortLocalFilesByDate(files);
+ break;
+ case 2:
+ // mFiles = FileStorageUtils.sortBySize(mSortAscending);
+ break;
+ }
+
+ return files;
+ }
/**
* Sorts list by Date
* @param files
*/
- public static Vector<OCFile> sortByDate(Vector<OCFile> files){
+ public static Vector<OCFile> sortOCFilesByDate(Vector<OCFile> files){
final Integer val;
if (mSortAscending){
val = 1;
return files;
}
+ /**
+ * Sorts list by Date
+ * @param filesArray
+ */
+ public static File[] sortLocalFilesByDate(File[] filesArray){
+ final Integer val;
+ if (mSortAscending){
+ val = 1;
+ } else {
+ val = -1;
+ }
+
+ List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
+
+ Collections.sort(files, new Comparator<File>() {
+ public int compare(File o1, File o2) {
+ if (o1.isDirectory() && o2.isDirectory()) {
+ Long obj1 = o1.lastModified();
+ return val * obj1.compareTo(o2.lastModified());
+ }
+ else if (o1.isDirectory()) {
+ return -1;
+ } else if (o2.isDirectory()) {
+ return 1;
+ } else if (o1.lastModified() == 0 || o2.lastModified() == 0){
+ return 0;
+ } else {
+ Long obj1 = o1.lastModified();
+ return val * obj1.compareTo(o2.lastModified());
+ }
+ }
+ });
+
+ File[] returnArray = new File[1];
+ return files.toArray(returnArray);
+ }
+
// /**
// * Sorts list by Size
// * @param sortAscending true: ascending, false: descending
* Sorts list by Name
* @param files files to sort
*/
- public static Vector<OCFile> sortByName(Vector<OCFile> files){
+ public static Vector<OCFile> sortOCFilesByName(Vector<OCFile> files){
final Integer val;
if (mSortAscending){
val = 1;
Collections.sort(files, new Comparator<OCFile>() {
public int compare(OCFile o1, OCFile o2) {
if (o1.isFolder() && o2.isFolder()) {
- return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());
+ return val * new AlphanumComparator().compare(o1, o2);
} else if (o1.isFolder()) {
return -1;
} else if (o2.isFolder()) {
return files;
}
+
+ /**
+ * Sorts list by Name
+ * @param filesArray files to sort
+ */
+ public static File[] sortLocalFilesByName(File[] filesArray){
+ final Integer val;
+ if (mSortAscending){
+ val = 1;
+ } else {
+ val = -1;
+ }
+
+ List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
+
+ Collections.sort(files, new Comparator<File>() {
+ public int compare(File o1, File o2) {
+ if (o1.isDirectory() && o2.isDirectory()) {
+ return val * o1.getPath().toLowerCase().compareTo(o2.getPath().toLowerCase());
+ } else if (o1.isDirectory()) {
+ return -1;
+ } else if (o2.isDirectory()) {
+ return 1;
+ }
+ return val * new AlphanumComparator().compare(o1.getPath().toLowerCase(),
+ o2.getPath().toLowerCase());
+ }
+ });
+
+ File[] returnArray = new File[1];
+ return files.toArray(returnArray);
+ }
/**
* Local Folder size
public static long getFolderSize(File dir) {
if (dir.exists()) {
long result = 0;
- File[] fileList = dir.listFiles();
- for(int i = 0; i < fileList.length; i++) {
- if(fileList[i].isDirectory()) {
- result += getFolderSize(fileList[i]);
- } else {
- result += fileList[i].length();
- }
+ for (File f : dir.listFiles()) {
+ if (f.isDirectory())
+ result += getFolderSize(f);
+ else
+ result += f.length();
}
return result;
}
String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
return (result != null) ? result : "";
}
-
+
+ /**
+ * Scans the default location for saving local copies of files searching for
+ * a 'lost' file with the same full name as the {@link OCFile} received as
+ * parameter.
+ *
+ * This method helps to keep linked local copies of the files when the app is uninstalled, and then
+ * reinstalled in the device. OR after the cache of the app was deleted in system settings.
+ *
+ * The method is assuming that all the local changes in the file where synchronized in the past. This is dangerous,
+ * but assuming the contrary could lead to massive unnecessary synchronizations of downloaded file after deleting
+ * the app cache.
+ *
+ * This should be changed in the near future to avoid any chance of data loss, but we need to add some options
+ * to limit hard automatic synchronizations to wifi, unless the user wants otherwise.
+ *
+ * @param file File to associate a possible 'lost' local file.
+ * @param account Account holding file.
+ */
+ public static void searchForLocalFileInDefaultPath(OCFile file, Account account) {
+ if (file.getStoragePath() == null && !file.isFolder()) {
+ File f = new File(FileStorageUtils.getDefaultSavePathFor(account.name, file));
+ if (f.exists()) {
+ file.setStoragePath(f.getAbsolutePath());
+ file.setLastSyncDateForData(f.lastModified());
+ }
+ }
+ }
+
+ public static boolean copyFile(File src, File target) {
+ boolean ret = true;
+
+ InputStream in = null;
+ OutputStream out = null;
+
+ try {
+ in = new FileInputStream(src);
+ out = new FileOutputStream(target);
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ } catch (IOException ex) {
+ ret = false;
+ } finally {
+ if (in != null) try {
+ in.close();
+ } catch (IOException e) {
+ e.printStackTrace(System.err);
+ }
+ if (out != null) try {
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace(System.err);
+ }
+ }
+
+ return ret;
+ }
+
}
--- /dev/null
+/**
+ * ownCloud Android client application
+ *
+ * @author masensio
+ * Copyright (C) 2015 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 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/>.
+ *
+ */
+
+package com.owncloud.android.utils;
+
+import android.accounts.Account;
+import android.os.AsyncTask;
+import android.util.Pair;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+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.operations.OnRemoteOperationListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.operations.GetSharesForFileOperation;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Async Task to get the users and groups which a file is shared with
+ */
+public class GetShareWithUsersAsyncTask extends AsyncTask<Object, Void, Pair<RemoteOperation, RemoteOperationResult>> {
+
+ private final String TAG = GetShareWithUsersAsyncTask.class.getSimpleName();
+ private final WeakReference<OnRemoteOperationListener> mListener;
+
+ public GetShareWithUsersAsyncTask(OnRemoteOperationListener listener) {
+ mListener = new WeakReference<OnRemoteOperationListener>(listener);
+ }
+
+ @Override
+ protected Pair<RemoteOperation, RemoteOperationResult> doInBackground(Object... params) {
+
+ GetSharesForFileOperation operation = null;
+ RemoteOperationResult result = null;
+
+ if (params != null && params.length == 3) {
+ OCFile file = (OCFile) params[0];
+ Account account = (Account) params[1];
+ FileDataStorageManager fileDataStorageManager = (FileDataStorageManager) params[2];
+
+ try {
+ // Get shares request
+ operation = new GetSharesForFileOperation(file.getRemotePath(), false, false);
+ OwnCloudAccount ocAccount = new OwnCloudAccount(account,
+ MainApp.getAppContext());
+ OwnCloudClient client = OwnCloudClientManagerFactory.getDefaultSingleton().
+ getClientFor(ocAccount, MainApp.getAppContext());
+ result = operation.execute(client, fileDataStorageManager);
+
+ } catch (Exception e) {
+ result = new RemoteOperationResult(e);
+ Log_OC.e(TAG, "Exception while getting shares", e);
+ }
+ } else {
+ result = new RemoteOperationResult(RemoteOperationResult.ResultCode.UNKNOWN_ERROR);
+ }
+
+ return new Pair(operation, result);
+ }
+
+ @Override
+ protected void onPostExecute(Pair<RemoteOperation, RemoteOperationResult> result) {
+
+ if (result!= null)
+ {
+ OnRemoteOperationListener listener = mListener.get();
+ if (listener!= null)
+ {
+ listener.onRemoteOperationFinish(result.first, result.second);
+ }
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package com.owncloud.android.utils;
+
+import android.webkit.MimeTypeMap;
+
+import com.owncloud.android.R;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>Helper class for detecting the right icon for a file or folder,
+ * based on its mime type and file extension.</p>
+ *
+ * This class maintains all the necessary mappings fot these detections.<br/>
+ * In order to add further mappings, there are up to three look up maps that need further values:
+ * <ol>
+ * <li>
+ * {@link MimetypeIconUtil#FILE_EXTENSION_TO_MIMETYPE_MAPPING}<br/>
+ * to add a new file extension to mime type mapping
+ * </li>
+ * <li>
+ * {@link MimetypeIconUtil#MIMETYPE_TO_ICON_MAPPING}<br/>
+ * to add a new mapping of a mime type to an icon mapping
+ * </li>
+ * <li>
+ * {@link MimetypeIconUtil#MAINMIMETYPE_TO_ICON_MAPPING}<br/>
+ * to add a new mapping for the main part of a mime type.
+ * This is a list of fallback mappings in case there is no mapping for the complete mime type
+ * </li>
+ * </ol>
+ */
+public class MimetypeIconUtil {
+ /** Mapping: icon for mime type */
+ private static final Map<String, Integer> MIMETYPE_TO_ICON_MAPPING = new HashMap<String, Integer>();
+ /** Mapping: icon for main mime type (first part of a mime type declaration). */
+ private static final Map<String, Integer> MAINMIMETYPE_TO_ICON_MAPPING = new HashMap<String, Integer>();
+ /** Mapping: mime type for file extension. */
+ private static final Map<String, List<String>> FILE_EXTENSION_TO_MIMETYPE_MAPPING =
+ new HashMap<String, List<String>>();
+
+ static {
+ populateFileExtensionMimeTypeMapping();
+ populateMimeTypeIconMapping();
+ populateMainMimeTypeMapping();
+ }
+
+ /**
+ * Returns the resource identifier of an image to use as icon associated to a known MIME type.
+ *
+ * @param mimetype MIME type string; if NULL, the method tries to guess it from the extension in filename
+ * @param filename Name, with extension.
+ * @return Identifier of an image resource.
+ */
+ public static int getFileTypeIconId(String mimetype, String filename) {
+ List<String> possibleMimeTypes;
+ if (mimetype == null) {
+ possibleMimeTypes = determineMimeTypesByFilename(filename);
+ } else {
+ possibleMimeTypes = Collections.singletonList(mimetype);
+ }
+
+ return determineIconIdByMimeTypeList(possibleMimeTypes);
+ }
+
+ /**
+ * Returns the resource identifier of an image to use as icon associated to a type of folder.
+ *
+ * @param isSharedViaUsers flag if the folder is shared via the users system
+ * @param isSharedViaLink flag if the folder is publicly shared via link
+ * @return Identifier of an image resource.
+ */
+ public static int getFolderTypeIconId(boolean isSharedViaUsers, boolean isSharedViaLink) {
+ if (isSharedViaLink) {
+ return R.drawable.folder_public;
+ } else if (isSharedViaUsers) {
+ return R.drawable.shared_with_me_folder;
+ }
+
+ return R.drawable.ic_menu_archive;
+ }
+
+ /**
+ * determines the icon based on the mime type.
+ *
+ * @param mimetypes the mimetypes
+ * @return the icon id, R.drawable.file if the mime type could not be matched at all or was {@code null}
+ */
+ private static int determineIconIdByMimeTypeList(List<String> mimetypes) {
+ // no mime type leads to file
+ if (mimetypes == null || mimetypes.size() < 1) {
+ return R.drawable.file;
+ } else {
+
+ // search for full mime type mapping
+ for (String mimetype : mimetypes) {
+ Integer iconId = MIMETYPE_TO_ICON_MAPPING.get(mimetype);
+
+ if (iconId != null) {
+ return iconId;
+ }
+ }
+
+ // fallback to main mime type part mapping
+ for (String mimetype : mimetypes) {
+ String mainMimetypePart = mimetype.split("/")[0];
+
+ Integer iconId = MAINMIMETYPE_TO_ICON_MAPPING.get(mainMimetypePart);
+ if (iconId != null) {
+ return iconId;
+ }
+ }
+ }
+
+ // no match found at all, falling back to file
+ return R.drawable.file;
+ }
+
+ /**
+ * determines the list of possible mime types for the given file, based on its extension.
+ *
+ * @param filename the file name
+ * @return list of possible mime types (ordered), empty list in case no mime types found
+ */
+ private static List<String> determineMimeTypesByFilename(String filename) {
+ String fileExtension = getExtension(filename);
+
+ // try detecting the mimetype based on the web app logic equivalent
+ List<String> mimeTypeList = FILE_EXTENSION_TO_MIMETYPE_MAPPING.get(fileExtension);
+ if (mimeTypeList != null && mimeTypeList.size() > 0) {
+ return mimeTypeList;
+ } else {
+ // try detecting the mime type via android itself
+ String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
+ if (mimeType != null) {
+ return Collections.singletonList(mimeType);
+ } else {
+ return new ArrayList<String>();
+ }
+ }
+ }
+
+ /**
+ * provides the file extension of a given filename.
+ *
+ * @param filename the filename
+ * @return the file extension
+ */
+ private static String getExtension(String filename) {
+ String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
+ return extension;
+ }
+
+ /**
+ * populates the mapping list: full mime type --> icon.
+ */
+ private static void populateMimeTypeIconMapping() {
+ MIMETYPE_TO_ICON_MAPPING.put("application/coreldraw", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/epub+zip", R.drawable.file_text);
+ MIMETYPE_TO_ICON_MAPPING.put("application/font-sfnt", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/font-woff", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/illustrator", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/javascript", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("application/json", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("application/msaccess", R.drawable.file);
+ MIMETYPE_TO_ICON_MAPPING.put("application/msexcel", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/mspowerpoint", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/msword", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/octet-stream", R.drawable.file);
+ MIMETYPE_TO_ICON_MAPPING.put("application/postscript", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/pdf", R.drawable.file_pdf);
+ MIMETYPE_TO_ICON_MAPPING.put("application/rss+xml", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("application/rtf", R.drawable.file);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.android.package-archive", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.addin.macroEnabled.12", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.sheet.binary.macroEnabled.12", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.sheet.macroEnabled.12", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.template.macroEnabled.12", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-fontobject", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.addin.macroEnabled.12", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.presentation.macroEnabled.12", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.slideshow.macroEnabled.12", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.template.macroEnabled.12", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-word.document.macroEnabled.12", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-word.template.macroEnabled.12", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.presentation", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.presentation-template", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.spreadsheet", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.spreadsheet-template", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text-master", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text-template", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text-web", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.presentationml.slideshow", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.presentationml.template", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-7z-compressed", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-bin", R.drawable.file_application);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-cbr", R.drawable.file_text);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-compressed", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-dcraw", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-deb", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-font", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-gimp", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-gzip", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-ms-dos-executable", R.drawable.file_application);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-msi", R.drawable.file_application);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-iwork-numbers-sffnumbers", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-iwork-keynote-sffkey", R.drawable.file_ppt);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-iwork-pages-sffpages", R.drawable.file_doc);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-perl", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-photoshop", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-php", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-rar-compressed", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-shockwave-flash", R.drawable.file_application);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-tar", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("application/x-tex", R.drawable.file_text);
+ MIMETYPE_TO_ICON_MAPPING.put("application/xml", R.drawable.file_text);
+ MIMETYPE_TO_ICON_MAPPING.put("application/yaml", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("application/zip", R.drawable.file_zip);
+ MIMETYPE_TO_ICON_MAPPING.put("database", R.drawable.file);
+ MIMETYPE_TO_ICON_MAPPING.put("httpd/unix-directory", R.drawable.ic_menu_archive);
+ MIMETYPE_TO_ICON_MAPPING.put("image/svg+xml", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("image/vector", R.drawable.file_image);
+ MIMETYPE_TO_ICON_MAPPING.put("text/calendar", R.drawable.file_calendar);
+ MIMETYPE_TO_ICON_MAPPING.put("text/css", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("text/csv", R.drawable.file_xls);
+ MIMETYPE_TO_ICON_MAPPING.put("text/html", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("text/vcard", R.drawable.file_vcard);
+ MIMETYPE_TO_ICON_MAPPING.put("text/x-c", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("text/x-c++src", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("text/x-h", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("text/x-python", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("text/x-shellscript", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("web", R.drawable.file_code);
+ MIMETYPE_TO_ICON_MAPPING.put("DIR", R.drawable.ic_menu_archive);
+ }
+
+ /**
+ * populates the mapping list: main mime type --> icon.
+ */
+ private static void populateMainMimeTypeMapping() {
+ MAINMIMETYPE_TO_ICON_MAPPING.put("audio", R.drawable.file_sound);
+ MAINMIMETYPE_TO_ICON_MAPPING.put("database", R.drawable.file);
+ MAINMIMETYPE_TO_ICON_MAPPING.put("httpd", R.drawable.file_zip);
+ MAINMIMETYPE_TO_ICON_MAPPING.put("image", R.drawable.file_image);
+ MAINMIMETYPE_TO_ICON_MAPPING.put("text", R.drawable.file_text);
+ MAINMIMETYPE_TO_ICON_MAPPING.put("video", R.drawable.file_movie);
+ MAINMIMETYPE_TO_ICON_MAPPING.put("web", R.drawable.file_code);
+ }
+
+ /**
+ * populates the mapping list: file extension --> mime type.
+ */
+ private static void populateFileExtensionMimeTypeMapping() {
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("3gp", Collections.singletonList("video/3gpp"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("7z", Collections.singletonList("application/x-7z-compressed"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("accdb", Collections.singletonList("application/msaccess"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ai", Collections.singletonList("application/illustrator"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("apk", Collections.singletonList("application/vnd.android.package-archive"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("arw", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("avi", Collections.singletonList("video/x-msvideo"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bash", Collections.singletonList("text/x-shellscript"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("blend", Collections.singletonList("application/x-blender"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bin", Collections.singletonList("application/x-bin"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bmp", Collections.singletonList("image/bmp"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bpg", Collections.singletonList("image/bpg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cb7", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cba", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbr", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbt", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbtc", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbz", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cc", Collections.singletonList("text/x-c"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cdr", Collections.singletonList("application/coreldraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cnf", Collections.singletonList("text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("conf", Collections.singletonList("text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cpp", Collections.singletonList("text/x-c++src"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cr2", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("css", Collections.singletonList("text/css"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("csv", Collections.singletonList("text/csv"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cvbdl", Collections.singletonList("application/x-cbr"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("c", Collections.singletonList("text/x-c"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("c++", Collections.singletonList("text/x-c++src"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dcr", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("deb", Collections.singletonList("application/x-deb"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dng", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("doc", Collections.singletonList("application/msword"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("docm", Collections.singletonList("application/vnd.ms-word.document.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("docx", Collections.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dot", Collections.singletonList("application/msword"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dotx", Collections.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.template"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dv", Collections.singletonList("video/dv"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("eot", Collections.singletonList("application/vnd.ms-fontobject"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("epub", Collections.singletonList("application/epub+zip"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("eps", Collections.singletonList("application/postscript"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("erf", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("exe", Collections.singletonList("application/x-ms-dos-executable"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("flac", Collections.singletonList("audio/flac"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("flv", Collections.singletonList("video/x-flv"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gif", Collections.singletonList("image/gif"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gz", Collections.singletonList("application/x-gzip"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gzip", Collections.singletonList("application/x-gzip"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("h", Collections.singletonList("text/x-h"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("hh", Collections.singletonList("text/x-h"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("html", Arrays.asList("text/html", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("htm", Arrays.asList("text/html", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ical", Collections.singletonList("text/calendar"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ics", Collections.singletonList("text/calendar"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("iiq", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("impress", Collections.singletonList("text/impress"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("jpeg", Collections.singletonList("image/jpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("jpg", Collections.singletonList("image/jpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("jps", Collections.singletonList("image/jpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("js", Arrays.asList("application/javascript", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("json", Arrays.asList("application/json", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("k25", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("kdc", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("key", Collections.singletonList("application/x-iwork-keynote-sffkey"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("keynote", Collections.singletonList("application/x-iwork-keynote-sffkey"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("kra", Collections.singletonList("application/x-krita"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("m2t", Collections.singletonList("video/mp2t"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("m4v", Collections.singletonList("video/mp4"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("markdown", Collections.singletonList("text/markdown"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mdown", Collections.singletonList("text/markdown"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("md", Collections.singletonList("text/markdown"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mdb", Collections.singletonList("application/msaccess"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mdwn", Collections.singletonList("text/markdown"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mkd", Collections.singletonList("text/markdown"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mef", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mkv", Collections.singletonList("video/x-matroska"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mobi", Collections.singletonList("application/x-mobipocket-ebook"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mov", Collections.singletonList("video/quicktime"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mp3", Collections.singletonList("audio/mpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mp4", Collections.singletonList("video/mp4"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mpeg", Collections.singletonList("video/mpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mpg", Collections.singletonList("video/mpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mpo", Collections.singletonList("image/jpeg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("msi", Collections.singletonList("application/x-msi"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mts", Collections.singletonList("video/MP2T"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mt2s", Collections.singletonList("video/MP2T"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("nef", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("numbers", Collections.singletonList("application/x-iwork-numbers-sffnumbers"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odf", Collections.singletonList("application/vnd.oasis.opendocument.formula"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odg", Collections.singletonList("application/vnd.oasis.opendocument.graphics"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odp", Collections.singletonList("application/vnd.oasis.opendocument.presentation"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ods", Collections.singletonList("application/vnd.oasis.opendocument.spreadsheet"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odt", Collections.singletonList("application/vnd.oasis.opendocument.text"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("oga", Collections.singletonList("audio/ogg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ogg", Collections.singletonList("audio/ogg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ogv", Collections.singletonList("video/ogg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("opus", Collections.singletonList("audio/ogg"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("orf", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("otf", Collections.singletonList("application/font-sfnt"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pages", Collections.singletonList("application/x-iwork-pages-sffpages"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pdf", Collections.singletonList("application/pdf"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pfb", Collections.singletonList("application/x-font"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pef", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("php", Collections.singletonList("application/x-php"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pl", Collections.singletonList("application/x-perl"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("png", Collections.singletonList("image/png"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pot", Collections.singletonList("application/vnd.ms-powerpoint"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("potm", Collections.singletonList("application/vnd.ms-powerpoint.template.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("potx", Collections.singletonList("application/vnd.openxmlformats-officedocument.presentationml.template"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppa", Collections.singletonList("application/vnd.ms-powerpoint"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppam", Collections.singletonList("application/vnd.ms-powerpoint.addin.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pps", Collections.singletonList("application/vnd.ms-powerpoint"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppsm", Collections.singletonList("application/vnd.ms-powerpoint.slideshow.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppsx", Collections.singletonList("application/vnd.openxmlformats-officedocument.presentationml.slideshow"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppt", Collections.singletonList("application/vnd.ms-powerpoint"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pptm", Collections.singletonList("application/vnd.ms-powerpoint.presentation.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pptx", Collections.singletonList("application/vnd.openxmlformats-officedocument.presentationml.presentation"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ps", Collections.singletonList("application/postscript"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("psd", Collections.singletonList("application/x-photoshop"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("py", Collections.singletonList("text/x-python"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("raf", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("rar", Collections.singletonList("application/x-rar-compressed"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("reveal", Collections.singletonList("text/reveal"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("rtf", Collections.singletonList("application/rtf"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("rw2", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sgf", Collections.singletonList("application/sgf"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sh-lib", Collections.singletonList("text/x-shellscript"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sh", Collections.singletonList("text/x-shellscript"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("srf", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sr2", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("svg", Arrays.asList("image/svg+xml", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("swf", Arrays.asList("application/x-shockwave-flash", "application/octet-stream"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tar", Collections.singletonList("application/x-tar"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gz", Collections.singletonList("application/x-compressed"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tex", Collections.singletonList("application/x-tex"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tgz", Collections.singletonList("application/x-compressed"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tiff", Collections.singletonList("image/tiff"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tif", Collections.singletonList("image/tiff"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ttf", Collections.singletonList("application/font-sfnt"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("txt", Collections.singletonList("text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("vcard", Collections.singletonList("text/vcard"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("vcf", Collections.singletonList("text/vcard"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("vob", Collections.singletonList("video/dvd"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("wav", Collections.singletonList("audio/wav"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("webm", Collections.singletonList("video/webm"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("woff", Collections.singletonList("application/font-woff"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("wmv", Collections.singletonList("video/x-ms-wmv"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xcf", Collections.singletonList("application/x-gimp"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xla", Collections.singletonList("application/vnd.ms-excel"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlam", Collections.singletonList("application/vnd.ms-excel.addin.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xls", Collections.singletonList("application/vnd.ms-excel"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlsb", Collections.singletonList("application/vnd.ms-excel.sheet.binary.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlsm", Collections.singletonList("application/vnd.ms-excel.sheet.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlsx", Collections.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlt", Collections.singletonList("application/vnd.ms-excel"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xltm", Collections.singletonList("application/vnd.ms-excel.template.macroEnabled.12"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xltx", Collections.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.template"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xml", Arrays.asList("application/xml", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xrf", Collections.singletonList("image/x-dcraw"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("yaml", Arrays.asList("application/yaml", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("yml", Arrays.asList("application/yaml", "text/plain"));
+ FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("zip", Collections.singletonList("application/zip"));
+ }
+}
*/\r
\r
package third_parties.daveKoeller;\r
+import java.text.Collator;\r
+import java.io.File;\r
import java.util.Comparator;\r
\r
import com.owncloud.android.datamodel.OCFile;\r
}\r
\r
/** Length of string is passed in for improved efficiency (only need to calculate it once) **/\r
- private final String getChunk(String s, int slength, int marker)\r
- {\r
+ private final String getChunk(String s, int slength, int marker){\r
StringBuilder chunk = new StringBuilder();\r
char c = s.charAt(marker);\r
chunk.append(c);\r
marker++;\r
- if (isDigit(c))\r
- {\r
+ if (isDigit(c)){\r
while (marker < slength)\r
{\r
c = s.charAt(marker);\r
chunk.append(c);\r
marker++;\r
}\r
- } else\r
- {\r
+ } else {\r
while (marker < slength)\r
{\r
c = s.charAt(marker);\r
return chunk.toString();\r
}\r
\r
- public int compare(OCFile o1, OCFile o2)\r
- {\r
- String s1 = (String)o1.getRemotePath().toLowerCase();\r
- String s2 = (String)o2.getRemotePath().toLowerCase();\r
+ public int compare(OCFile o1, OCFile o2){\r
+ String s1 = o1.getRemotePath().toLowerCase();\r
+ String s2 = o2.getRemotePath().toLowerCase();\r
+\r
+ return compare(s1, s2);\r
+ }\r
+\r
+ public int compare(File f1, File f2){\r
+ String s1 = f1.getPath().toLowerCase();\r
+ String s2 = f2.getPath().toLowerCase();\r
\r
+ return compare(s1, s2);\r
+ }\r
+\r
+ public int compare(String s1, String s2) {\r
int thisMarker = 0;\r
int thatMarker = 0;\r
int s1Length = s1.length();\r
int s2Length = s2.length();\r
\r
- while (thisMarker < s1Length && thatMarker < s2Length)\r
- {\r
+ while (thisMarker < s1Length && thatMarker < s2Length) {\r
String thisChunk = getChunk(s1, s1Length, thisMarker);\r
thisMarker += thisChunk.length();\r
\r
\r
// If both chunks contain numeric characters, sort them numerically\r
int result = 0;\r
- if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0)))\r
- {\r
+ if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) {\r
// Simple chunk comparison by length.\r
int thisChunkLength = thisChunk.length();\r
result = thisChunkLength - thatChunk.length();\r
// If equal, the first different number counts\r
- if (result == 0)\r
- {\r
- for (int i = 0; i < thisChunkLength; i++)\r
- {\r
+ if (result == 0) {\r
+ for (int i = 0; i < thisChunkLength; i++) {\r
result = thisChunk.charAt(i) - thatChunk.charAt(i);\r
- if (result != 0)\r
- {\r
+ if (result != 0) {\r
return result;\r
}\r
}\r
}\r
- } else\r
- {\r
- result = thisChunk.compareTo(thatChunk);\r
+ } else {\r
+ Collator collator = Collator.getInstance();\r
+ collator.setStrength(Collator.PRIMARY);\r
+ result = collator.compare(thisChunk, thatChunk);\r
}\r
\r
if (result != 0)\r
ListAdapter adapter = getAdapter();
if (adapter != null && adapter instanceof HeaderViewGridAdapter) {
((HeaderViewGridAdapter) adapter).setNumColumns(getNumColumnsCompatible());
+ invalidateRowHeight();
((HeaderViewGridAdapter) adapter).setRowHeight(getRowHeight());
}
}
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
-target=android-19
+target=android-23
with a download link to the ownCloud app in the `Google Play store
<https://play.google.com/store/apps/details?id=com.owncloud.android>`_.
-.. figure:: images/android-first-screen.jpg
+.. figure:: images/android-1.png
+ :scale: 75%
+ :alt: Android app new account welcome screen.
-You will also find these links on your Personal page in the Web interface,
+You will also find these links on your Personal page in the ownCloud Web interface.
-You can also get it from the `Amazon App store
-<http://www.amazon.com/ownCloud-Inc/dp/B00944PQMK/>`_, and get source code and
-more information from the `ownCloud download page
+Find source code and more information from the `ownCloud download page
<http://owncloud.org/install/#mobile>`_.
Connecting to Your ownCloud Server
button. (Click the eyeball to the right of your password to expose your
password.)
-.. figure:: images/android-new-account.png
+.. figure:: images/android-2.png
+ :scale: 75%
+ :alt: New account creation screen.
For best security your ownCloud server should be SSL-enabled, so that you can
connect via ``https``. The ownCloud app will test your connection as soon as
you enter it and tell you if you entered it correctly. If your server has a
-self-signed SSL certificate you'll get a scary warning how it is not to be
+self-signed SSL certificate you'll get a warning that it is not to be
trusted. Click the OK button to accept the certificate and complete your account
setup.
-.. figure:: images/android-ssl-cert.png
+.. figure:: images/android-3.png
+ :alt: SSL certificate warning.
Managing Files
--------------
-Now you should see the Files page of your ownCloud account. Click the overflow
-button at the top right (that's the one with three vertical dots, and that is
-really what it is called) to open a user menu. ``Refresh account`` refreshes the
-page view. ``Settings`` take you to your settings menu. ``Sort`` gives you the
-option to sort your files by date, or alphabetically.
+Now you should see the Files page of your ownCloud account.
-.. figure:: images/android-files-page.png
+.. figure:: images/android-4.png
+ :scale: 75%
+ :alt: Your ownCloud Files page.
-The little file folder icon to the left of the overflow button opens a dialog to
-create a new folder. The arrow button opens a file upload dialog, and you can
-either upload content from other Android apps such as Google Drive, the Gallery,
-your music player, or from your Android filesystem. When you add a new file
-you will see a confirmation on the top left when it has uploaded successfully,
-and it is immediately synchronized with the server.
-
-.. figure:: images/android-upload.png
-
-All files (that you have permission to access) on your ownCloud server are
-displayed in your Android app, but are not downloaded until you download them.
-Downloaded files are marked with a green arrow.
-
-.. figure:: images/android-file-list.png
-
-Download and preview a file with a short press on the filename. When the file
-is in preview mode, a short press on the overflow button opens a menu with
-options for sharing, opening with an app, removing, sending, and displaying file
-details.
+The ownCloud menu at the top left shows the name of the logged-in user, has a
+shortcut to your files, and contains the Settings button.
-.. figure:: images/android-file.png
+.. figure:: images/android-5.png
+ :alt: Top-left menu.
+Click the overflow button at the top right (that's the one with three vertical
+dots, and that is really what it is called) to open a user menu. ``Refresh
+account`` syncs your files, and ``Sort`` gives you the option to sort your files
+by date, or alphabetically.
-A long press on the filename does not download it, but opens a dialog with
-options for sharing, downloading, renaming, moving, removing, sending, and
-viewing file details.
+.. figure:: images/android-6.png
+ :alt: Top-right menu.
+The little file folder icon to the left of the overflow button opens a dialog to
+create a new folder. The arrow button opens a file upload dialog, and you can
+either upload content from other Android apps such as Google Drive, the Gallery,
+your music player, or from your Android filesystem.
-.. figure:: images/android-file-options.png
+.. figure:: images/android-7.png
+ :scale: 75%
+ :alt: File upload dialogue.
+All files (that you have permission to access) on your ownCloud server are
+displayed in your Android app, but are not downloaded until you click on them to
+download them. Downloaded files are marked with a green arrow.
+
+.. figure:: images/android-8.png
+ :scale: 75%
+ :alt: Downloaded files are marked with green arrows.
+
+Download and preview a file with a short press on the filename. Then a short
+press on the overflow button opens a menu with
+options for managing your file.
+
+.. figure:: images/android-9.png
+ :scale: 75%
+ :alt: File management options. Betsy Ross says "Don't believe everything you
+ read on the Internet."
+
+When you are on your mail Files page, a long press on any folder displays a
+list of options: Share Link, Download, Rename, Move, Copy, and Remove.
+
+.. figure:: images/android-11.png
+ :scale: 75%
+ :alt: Folder and file management options.
+
+When you enter a folder, a long press on any file or folder has these
+additional options: Open With, Refresh File, Send, Favorite, and Details. The
+Download option appears on files that have not been downloaded to your Android
+device.
Settings
--------
-The Settings screen offers a number of useful options. In the Accounts
-section you can configure multiple ownCloud accounts.
+Use the Settings screen to control your ownCloud app functions.
+
+.. figure:: images/android-10.png
+ :scale: 75%
+ :alt: Setting screen.
+
+In the Accounts section you can set up and manage multiple accounts.
The Security section sets up strong two-factor authentication by allowing you
to add a PIN (personal identification number) to access your account.
-The Instant Uploads section creates a directory, :file:`/InstantUpload`, and
-any photos or videos created with your Android device's camera are instantly
+The Instant Uploads section creates a directory, :file:`/InstantUpload`, and any
+photos or videos created with your Android device's camera are instantly
uploaded to this directory. You also have the option to choose any other
-existing directory. Another nice option is Upload Pictures/Video via WiFi Only,
-to conserve your Internet data usage.
-
-.. figure:: images/android-settings.png
+existing directory, or to create a new one. Another nice option is Upload
+Pictures/Video via WiFi Only, to conserve your mobile data usage.
The bottom section of the Settings screen has links to help and the
app's version number.
-
-.. figure:: images/android-help.png