Merge branch 'uploadWhenCharging' of github.com:owncloud/android into uploadWhenCharging
authortobiasKaminsky <tobias@kaminsky.me>
Sun, 18 Oct 2015 08:08:46 +0000 (10:08 +0200)
committertobiasKaminsky <tobias@kaminsky.me>
Sun, 18 Oct 2015 08:08:46 +0000 (10:08 +0200)
1  2 
res/xml/preferences.xml
src/com/owncloud/android/ui/activity/Preferences.java

diff --combined res/xml/preferences.xml
@@@ -3,7 -3,7 +3,7 @@@
    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_accounts" android:key="accounts_category">
-       </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" />
 +              <!-- ListPreference
 +            android:key="select_oc_account"
 +            android:title="@string/prefs_select_oc_account"
 +            android:summary="@string/prefs_summary_select_oc_account"
 +            / -->
 +              <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:title="@string/prefs_pincode" android:key="set_pincode"
 +                      android:summary="@string/prefs_pincode_summary"/>
        </PreferenceCategory>
  
-       <PreferenceCategory android:title="@string/prefs_category_instant_uploading" android:key="instant_uploading_category">
-               <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:key="instant_uploading"
-                       android:title="@string/prefs_instant_upload"
-                       android:summary="@string/prefs_instant_upload_summary"/>
-               <EditTextPreference android:title="@string/prefs_instant_upload_path_title"
-                       android:defaultValue="@string/instant_upload_path"
-                       android:key="instant_upload_path"/>
-               <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle 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:key="instant_video_uploading"
-                       android:title="@string/prefs_instant_video_upload"
-                       android:summary="@string/prefs_instant_video_upload_summary"/>
-               <EditTextPreference android:title="@string/prefs_instant_video_upload_path_title"
-                       android:defaultValue="@string/instant_upload_path"
-                       android:key="instant_video_upload_path"/>
-               <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:dependency="instant_video_uploading"
-                       android:disableDependentsState="true"
-                       android:title="@string/instant_video_upload_on_wifi"
-                       android:key="instant_video_upload_on_wifi"/>
+     <PreferenceCategory android:title="@string/prefs_category_instant_uploading"
+               android:key="instant_uploading_category">
+           <EditTextPreference android:title="@string/prefs_instant_upload_path_title"
+                                               android:defaultValue="@string/instant_upload_path"
+                                               android:key="instant_upload_path"/>
+           <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_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" />
+           <com.owncloud.android.ui.PreferenceWithLongSummary
+                                                       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"/>
 +              <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"/>
-               <!-- 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>
+           <!-- 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" 
 -                                      android:key="about_app" />
 +              <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"
 +                      android:key="about_app" />
        </PreferenceCategory>
 -    
 +
  
  </PreferenceScreen>
@@@ -32,8 -32,8 +32,8 @@@ import android.content.ServiceConnectio
  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.Bundle;
  import android.os.Handler;
  import android.os.IBinder;
@@@ -44,15 -44,22 +44,22 @@@ import android.preference.Preference.On
  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;
  
@@@ -75,6 -82,9 +82,9 @@@ import com.owncloud.android.utils.Displ
  
  /**
   * 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 {
@@@ -87,6 -97,7 +97,7 @@@
      private DbHandler mDbHandler;
      private CheckBoxPreference pCode;
      private Preference pAboutApp;
+     private AppCompatDelegate mDelegate;
  
      private PreferenceCategory mAccountsPrefCategory = null;
      private final Handler mHandler = new Handler();
      @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);
              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);
          }
      }
  
          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()) {
          }
      }
  
+     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;
      }
  
      /**
          SharedPreferences appPrefs =
                  PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
          mUploadVideoPath = appPrefs.getString("instant_video_upload_path", getString(R.string.instant_upload_path));
 -        mPrefInstantVideoUploadPath.setSummary(mUploadVideoPath);
 +//        mPrefInstantVideoUploadPath.setSummary(mUploadVideoPath);
      }
  
      /**