2 * ownCloud Android client application
5 * @author David A. Velasco
6 * Copyright (C) 2015 ownCloud Inc.
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2,
10 * as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 package com
.owncloud
.android
.ui
.activity
;
24 import android
.app
.SearchManager
;
25 import android
.content
.Intent
;
26 import android
.net
.Uri
;
27 import android
.os
.Bundle
;
28 import android
.support
.v4
.app
.DialogFragment
;
29 import android
.support
.v4
.app
.Fragment
;
30 import android
.support
.v4
.app
.FragmentTransaction
;
32 import com
.owncloud
.android
.R
;
33 import com
.owncloud
.android
.lib
.common
.utils
.Log_OC
;
34 import com
.owncloud
.android
.operations
.CreateShareViaLinkOperation
;
35 import com
.owncloud
.android
.operations
.GetSharesForFileOperation
;
36 import com
.owncloud
.android
.providers
.UsersAndGroupsSearchProvider
;
38 import com
.owncloud
.android
.lib
.common
.operations
.RemoteOperation
;
39 import com
.owncloud
.android
.lib
.common
.operations
.RemoteOperationResult
;
40 import com
.owncloud
.android
.datamodel
.OCFile
;
41 import com
.owncloud
.android
.lib
.resources
.shares
.OCShare
;
42 import com
.owncloud
.android
.lib
.resources
.shares
.ShareType
;
43 import com
.owncloud
.android
.ui
.dialog
.ShareLinkToDialog
;
44 import com
.owncloud
.android
.ui
.fragment
.SearchShareesFragment
;
45 import com
.owncloud
.android
.ui
.fragment
.ShareFileFragment
;
46 import com
.owncloud
.android
.utils
.GetShareWithUsersAsyncTask
;
48 import org
.apache
.http
.protocol
.HTTP
;
52 * Activity for sharing files
55 public class ShareActivity
extends FileActivity
56 implements ShareFileFragment
.OnShareFragmentInteractionListener
,
57 SearchShareesFragment
.OnSearchFragmentInteractionListener
{
59 private static final String TAG
= ShareActivity
.class.getSimpleName();
61 private static final String TAG_SHARE_FRAGMENT
= "SHARE_FRAGMENT";
62 private static final String TAG_SEARCH_FRAGMENT
= "SEARCH_USER_AND_GROUPS_FRAGMENT";
65 private static final String FTAG_CHOOSER_DIALOG
= "CHOOSER_DIALOG";
68 protected void onCreate(Bundle savedInstanceState
) {
69 super.onCreate(savedInstanceState
);
71 setContentView(R
.layout
.share_activity
);
73 FragmentTransaction ft
= getSupportFragmentManager().beginTransaction();
75 if (savedInstanceState
== null
) {
76 // Add Share fragment on first creation
77 Fragment fragment
= ShareFileFragment
.newInstance(getFile(), getAccount());
78 ft
.replace(R
.id
.share_fragment_container
, fragment
, TAG_SHARE_FRAGMENT
);
84 protected void onAccountSet(boolean stateWasRecovered
) {
85 super.onAccountSet(stateWasRecovered
);
87 // Load data into the list
88 Log_OC
.d(TAG
, "Refreshing lists on account set");
89 refreshSharesFromStorageManager();
91 // Request for a refresh of the data through the server (starts an Async Task)
92 refreshUsersOrGroupsListFromServer();
97 protected void onNewIntent(Intent intent
) {
98 // Verify the action and get the query
99 if (Intent
.ACTION_SEARCH
.equals(intent
.getAction())) {
100 String query
= intent
.getStringExtra(SearchManager
.QUERY
);
101 Log_OC
.w(TAG
, "Ignored Intent requesting to query for " + query
);
103 } else if (UsersAndGroupsSearchProvider
.ACTION_SHARE_WITH
.equals(intent
.getAction())) {
104 Uri data
= intent
.getData();
106 data
.getLastPathSegment(),
107 UsersAndGroupsSearchProvider
.DATA_GROUP
.equals(data
.getAuthority())
111 Log_OC
.wtf(TAG
, "Unexpected intent " + intent
.toString());
115 private void doShareWith(String shareeName
, boolean isGroup
) {
116 getFileOperationsHelper().shareFileWithSharee(
119 (isGroup ? ShareType
.GROUP
: ShareType
.USER
)
124 public void showSearchUsersAndGroups() {
125 // replace ShareFragment with SearchFragment on demand
126 FragmentTransaction ft
= getSupportFragmentManager().beginTransaction();
127 Fragment searchFragment
= SearchShareesFragment
.newInstance(getFile(), getAccount());
128 ft
.replace(R
.id
.share_fragment_container
, searchFragment
, TAG_SEARCH_FRAGMENT
);
129 ft
.addToBackStack(null
); // BACK button will recover the ShareFragment
134 // Call to Unshare operation
135 public void unshareWith(OCShare share
) {
136 OCFile file
= getFile();
137 getFileOperationsHelper().unshareFileWithUserOrGroup(file
, share
.getShareType(), share
.getShareWith());
141 * Get users and groups from the server to fill in the "share with" list
144 public void refreshUsersOrGroupsListFromServer() {
146 showLoadingDialog(getString(R
.string
.common_loading
));
147 // Get Users and Groups
148 GetShareWithUsersAsyncTask getTask
= new GetShareWithUsersAsyncTask(this);
149 Object
[] params
= {getFile(), getAccount(), getStorageManager()};
150 getTask
.execute(params
);
154 * Updates the view associated to the activity after the finish of some operation over files
155 * in the current account.
157 * @param operation Removal operation performed.
158 * @param result Result of the removal.
161 public void onRemoteOperationFinish(RemoteOperation operation
, RemoteOperationResult result
) {
162 super.onRemoteOperationFinish(operation
, result
);
164 if (result
.isSuccess() ||
165 (operation
instanceof GetSharesForFileOperation
&&
166 result
.getCode() == RemoteOperationResult
.ResultCode
.SHARE_NOT_FOUND
169 Log_OC
.d(TAG
, "Refreshing view on successful operation or finished refresh");
170 refreshSharesFromStorageManager();
173 if (operation
instanceof CreateShareViaLinkOperation
) {
174 // Send link to the app
175 String link
= ((OCShare
) (result
.getData().get(0))).getShareLink();
176 Log_OC
.d(TAG
, "Share link = " + link
);
178 Intent intentToShareLink
= new Intent(Intent
.ACTION_SEND
);
179 intentToShareLink
.putExtra(Intent
.EXTRA_TEXT
, link
);
180 intentToShareLink
.setType(HTTP
.PLAIN_TEXT_TYPE
);
181 String
[] packagesToExclude
= new String
[]{getPackageName()};
182 DialogFragment chooserDialog
= ShareLinkToDialog
.newInstance(intentToShareLink
, packagesToExclude
);
183 chooserDialog
.show(getSupportFragmentManager(), FTAG_CHOOSER_DIALOG
);
190 * Updates the view, reading data from {@link com.owncloud.android.datamodel.FileDataStorageManager}
192 private void refreshSharesFromStorageManager() {
194 ShareFileFragment shareFileFragment
= getShareFileFragment();
195 if (shareFileFragment
!= null
196 && shareFileFragment
.isAdded()) { // only if added to the view hierarchy!!
197 shareFileFragment
.refreshCapabilitiesFromDB();
198 shareFileFragment
.refreshUsersOrGroupsListFromDB();
199 shareFileFragment
.refreshPublicShareFromDB();
202 SearchShareesFragment searchShareesFragment
= getSearchFragment();
203 if (searchShareesFragment
!= null
&&
204 searchShareesFragment
.isAdded()) { // only if added to the view hierarchy!!
205 searchShareesFragment
.refreshUsersOrGroupsListFromDB();
210 * Shortcut to get access to the {@link ShareFileFragment} instance, if any
212 * @return A {@link ShareFileFragment} instance, or null
214 private ShareFileFragment
getShareFileFragment() {
215 return (ShareFileFragment
) getSupportFragmentManager().findFragmentByTag(TAG_SHARE_FRAGMENT
);
219 * Shortcut to get access to the {@link SearchShareesFragment} instance, if any
221 * @return A {@link SearchShareesFragment} instance, or null
223 private SearchShareesFragment
getSearchFragment() {
224 return (SearchShareesFragment
) getSupportFragmentManager().findFragmentByTag(TAG_SEARCH_FRAGMENT
);