Browse Source

Merge pull request #898 from nextcloud/logoutButton

logout button in drawer
Mario Đanić 8 years ago
parent
commit
da6175595c

+ 64 - 0
drawable_resources/logout.svg

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="25.6"
+   viewBox="0 0 24 24"
+   width="25.6"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.1 r15371"
+   sodipodi:docname="logout.svg"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   style="fill:#000000"
+   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\logoutButton\src\main\res\drawable-mdpi\logout.png">
+  <metadata
+     id="metadata12">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1005"
+     id="namedview8"
+     showgrid="false"
+     inkscape:zoom="13.906433"
+     inkscape:cx="-2.7503911"
+     inkscape:cy="14.502003"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <path
+     d="M 0,0 H 24 V 24 H 0 Z"
+     id="path4"
+     inkscape:connector-curvature="0"
+     style="fill:none" />
+  <path
+     d="m 10.09,15.59 1.41,1.41 5,-5 -5,-5 -1.41,1.41 2.58,2.59 H 3 v 2 h 9.67 z M 19,3 H 5 C 3.89,3 3,3.9 3,5 V 9 H 5 V 5 H 19 V 19 H 5 V 15 H 3 v 4 c 0,1.1 0.89,2 2,2 h 14 c 1.1,0 2,-0.9 2,-2 V 5 C 21,3.9 20.1,3 19,3 Z"
+     id="path6"
+     style="fill:#757575;fill-opacity:1"
+     inkscape:connector-curvature="0" />
+</svg>

+ 9 - 0
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -353,6 +353,10 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
             navigationView.getMenu().removeItem(R.id.nav_contacts);
             navigationView.getMenu().removeItem(R.id.nav_contacts);
         }
         }
 
 
+        if (!getResources().getBoolean(R.bool.show_drawer_logout)) {
+            navigationView.getMenu().removeItem(R.id.nav_logout);
+        }
+
         if (AccountUtils.hasSearchSupport(account)) {
         if (AccountUtils.hasSearchSupport(account)) {
             if (!getResources().getBoolean(R.bool.recently_added_enabled)) {
             if (!getResources().getBoolean(R.bool.recently_added_enabled)) {
                 navigationView.getMenu().removeItem(R.id.nav_recently_added);
                 navigationView.getMenu().removeItem(R.id.nav_recently_added);
@@ -455,6 +459,11 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
                         ParticipateActivity.class);
                         ParticipateActivity.class);
                 startActivity(participateIntent);
                 startActivity(participateIntent);
                 break;
                 break;
+            case R.id.nav_logout:
+                mCheckedMenuItem = -1;
+                menuItem.setChecked(false);
+                UserInfoActivity.openAccountRemovalConfirmationDialog(getAccount(), getFragmentManager(), true);
+                break;
             case R.id.drawer_menu_account_add:
             case R.id.drawer_menu_account_add:
                 createAccount(false);
                 createAccount(false);
                 break;
                 break;

+ 23 - 6
src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -24,9 +24,11 @@
 package com.owncloud.android.ui.activity;
 package com.owncloud.android.ui.activity;
 
 
 import android.accounts.Account;
 import android.accounts.Account;
+import android.accounts.AccountManager;
 import android.app.AlertDialog;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.app.DialogFragment;
+import android.app.FragmentManager;
 import android.content.DialogInterface;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Bundle;
@@ -70,6 +72,7 @@ public class UserInfoActivity extends FileActivity {
 
 
     private static final String KEY_USER_DATA = "USER_DATA";
     private static final String KEY_USER_DATA = "USER_DATA";
     private static final String KEY_ACCOUNT = "ACCOUNT";
     private static final String KEY_ACCOUNT = "ACCOUNT";
+    private static final String KEY_DIRECT_REMOVE = "DIRECT_REMOVE";
 
 
     private static final int KEY_DELETE_CODE = 101;
     private static final int KEY_DELETE_CODE = 101;
 
 
@@ -208,7 +211,7 @@ public class UserInfoActivity extends FileActivity {
                 changeAccountPassword(account);
                 changeAccountPassword(account);
                 break;
                 break;
             case R.id.delete_account:
             case R.id.delete_account:
-                openAccountRemovalConfirmationDialog(account);
+                openAccountRemovalConfirmationDialog(account, getFragmentManager(), false);
                 break;
                 break;
             default:
             default:
                 retval = super.onOptionsItemSelected(item);
                 retval = super.onOptionsItemSelected(item);
@@ -292,19 +295,22 @@ public class UserInfoActivity extends FileActivity {
         startActivity(updateAccountCredentials);
         startActivity(updateAccountCredentials);
     }
     }
 
 
-    private void openAccountRemovalConfirmationDialog(Account account) {
+    public static void openAccountRemovalConfirmationDialog(Account account, FragmentManager fragmentManager,
+                                                            boolean removeDirectly) {
         UserInfoActivity.AccountRemovalConfirmationDialog dialog =
         UserInfoActivity.AccountRemovalConfirmationDialog dialog =
-                UserInfoActivity.AccountRemovalConfirmationDialog.newInstance(account);
+                UserInfoActivity.AccountRemovalConfirmationDialog.newInstance(account, removeDirectly);
-        dialog.show(getFragmentManager(), "dialog");
+        dialog.show(fragmentManager, "dialog");
     }
     }
 
 
     public static class AccountRemovalConfirmationDialog extends DialogFragment {
     public static class AccountRemovalConfirmationDialog extends DialogFragment {
 
 
         private Account account;
         private Account account;
 
 
-        public static UserInfoActivity.AccountRemovalConfirmationDialog newInstance(Account account) {
+        public static UserInfoActivity.AccountRemovalConfirmationDialog newInstance(Account account,
+                                                                                    boolean removeDirectly) {
             Bundle bundle = new Bundle();
             Bundle bundle = new Bundle();
             bundle.putParcelable(KEY_ACCOUNT, account);
             bundle.putParcelable(KEY_ACCOUNT, account);
+            bundle.putBoolean(KEY_DIRECT_REMOVE, removeDirectly);
 
 
             UserInfoActivity.AccountRemovalConfirmationDialog dialog = new
             UserInfoActivity.AccountRemovalConfirmationDialog dialog = new
                     UserInfoActivity.AccountRemovalConfirmationDialog();
                     UserInfoActivity.AccountRemovalConfirmationDialog();
@@ -322,6 +328,7 @@ public class UserInfoActivity extends FileActivity {
         @NonNull
         @NonNull
         @Override
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
         public Dialog onCreateDialog(Bundle savedInstanceState) {
+            final boolean removeDirectly = getArguments().getBoolean(KEY_DIRECT_REMOVE);
             return new AlertDialog.Builder(getActivity(), R.style.Theme_ownCloud_Dialog)
             return new AlertDialog.Builder(getActivity(), R.style.Theme_ownCloud_Dialog)
                     .setTitle(R.string.delete_account)
                     .setTitle(R.string.delete_account)
                     .setMessage(getResources().getString(R.string.delete_account_warning, account.name))
                     .setMessage(getResources().getString(R.string.delete_account_warning, account.name))
@@ -334,9 +341,19 @@ public class UserInfoActivity extends FileActivity {
                                     bundle.putParcelable(KEY_ACCOUNT, Parcels.wrap(account));
                                     bundle.putParcelable(KEY_ACCOUNT, Parcels.wrap(account));
                                     Intent intent = new Intent();
                                     Intent intent = new Intent();
                                     intent.putExtras(bundle);
                                     intent.putExtras(bundle);
-                                    if (getActivity() != null) {
+                                    if (getActivity() != null && !removeDirectly) {
                                         getActivity().setResult(KEY_DELETE_CODE, intent);
                                         getActivity().setResult(KEY_DELETE_CODE, intent);
                                         getActivity().finish();
                                         getActivity().finish();
+                                    } else {
+                                        AccountManager am = (AccountManager) getActivity()
+                                                .getSystemService(ACCOUNT_SERVICE);
+
+                                        am.removeAccount(account, null, null);
+
+                                        Intent start = new Intent(getActivity(), FileDisplayActivity.class);
+                                        start.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                                        startActivity(start);
+
                                     }
                                     }
 
 
                                 }
                                 }

BIN
src/main/res/drawable-hdpi/logout.png


BIN
src/main/res/drawable-mdpi/logout.png


BIN
src/main/res/drawable-xhdpi/logout.png


BIN
src/main/res/drawable-xxhdpi/logout.png


BIN
src/main/res/drawable-xxxhdpi/logout.png


+ 5 - 0
src/main/res/menu/drawer_menu.xml

@@ -137,6 +137,11 @@
             android:icon="@drawable/ic_participate"
             android:icon="@drawable/ic_participate"
             android:orderInCategory="4"
             android:orderInCategory="4"
             android:title="@string/drawer_participate"/>
             android:title="@string/drawer_participate"/>
+        <item
+            android:id="@+id/nav_logout"
+            android:icon="@drawable/logout"
+            android:orderInCategory="4"
+            android:title="@string/drawer_logout"/>
     </group>
     </group>
 
 
     <!--
     <!--

+ 4 - 3
src/main/res/values/setup.xml

@@ -33,11 +33,12 @@
     <string name="auth_method_saml_web_sso">off</string>
     <string name="auth_method_saml_web_sso">off</string>
     
     
     <!-- Flags to enable/disable some features -->
     <!-- Flags to enable/disable some features -->
-    <string name = "send_files_to_other_apps">on</string>
+    <string name="send_files_to_other_apps">on</string>
-    <bool name = "share_via_link_feature">true</bool>
+    <bool name="share_via_link_feature">true</bool>
-    <bool name = "share_with_users_feature">true</bool>
+    <bool name="share_with_users_feature">true</bool>
     <bool name="show_whats_new">true</bool>
     <bool name="show_whats_new">true</bool>
     <bool name="show_external_links">true</bool>
     <bool name="show_external_links">true</bool>
+    <bool name="show_drawer_logout">false</bool>
     
     
     // Contacts backup
     // Contacts backup
     <bool name="contacts_backup">true</bool>
     <bool name="contacts_backup">true</bool>

+ 1 - 0
src/main/res/values/strings.xml

@@ -654,6 +654,7 @@
 
 
     <!-- Notifications -->
     <!-- Notifications -->
     <string name="new_notification_received">New notification received</string>
     <string name="new_notification_received">New notification received</string>
+    <string name="drawer_logout">Logout</string>
 
 
 
 
 </resources>
 </resources>

+ 4 - 3
src/modified/res/values/setup.xml

@@ -30,10 +30,11 @@
     <string name="auth_method_saml_web_sso">off</string>
     <string name="auth_method_saml_web_sso">off</string>
     
     
     <!-- Flags to enable/disable some features -->
     <!-- Flags to enable/disable some features -->
-    <string name = "send_files_to_other_apps">on</string>
+    <string name="send_files_to_other_apps">on</string>
-    <bool name = "share_via_link_feature">true</bool>
+    <bool name="share_via_link_feature">true</bool>
-    <bool name = "share_with_users_feature">true</bool>
+    <bool name="share_with_users_feature">true</bool>
     <bool name="show_external_links">true</bool>
     <bool name="show_external_links">true</bool>
+    <bool name="show_drawer_logout">true</bool>
   
   
     <bool name="show_whats_new">true</bool>
     <bool name="show_whats_new">true</bool>
     <!-- To fill if you want to show webviews instead of regular welcome views -->
     <!-- To fill if you want to show webviews instead of regular welcome views -->