Started working on the "Where is my device?" feature
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / activity / Preferences.java
index 70f3362..a374b24 100644 (file)
@@ -26,6 +26,7 @@ import android.accounts.AccountManager;
 import android.app.Activity;\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
+import android.preference.CheckBoxPreference;\r
 import android.preference.ListPreference;\r
 import android.preference.Preference;\r
 import android.preference.Preference.OnPreferenceChangeListener;\r
@@ -50,172 +51,215 @@ import eu.alefzero.owncloud.db.DbHandler;
 \r
 /**\r
  * An Activity that allows the user to change the application's settings.\r
+ * \r
  * @author Bartek Przybylski\r
- *\r
- */\r
-public class Preferences extends SherlockPreferenceActivity implements OnPreferenceChangeListener {\r
-  private static final String TAG = "OwnCloudPreferences";\r
-  private final int mNewSession = 47;\r
-  private final int mEditSession = 48;\r
-  private DbHandler mDbHandler;\r
-  private Vector<OwnCloudSession> mSessions;\r
-  private Account[] mAccounts;\r
-  private ListPreference mAccountList;\r
-  private int mSelectedMenuItem;\r
-  \r
-  @Override\r
-  public void onCreate(Bundle savedInstanceState){\r
-    super.onCreate(savedInstanceState);\r
-    mDbHandler = new DbHandler(getBaseContext());\r
-    mSessions = new Vector<OwnCloudSession>();\r
-    addPreferencesFromResource(R.xml.preferences);\r
-    registerForContextMenu(getListView());\r
-    populateAccountList();\r
-    ActionBar actionBar = getSherlock().getActionBar();\r
-    actionBar.setDisplayHomeAsUpEnabled(true);\r
-    //populateSessionList();\r
-  }\r
-  \r
-  private void populateSessionList() {\r
-    mSessions.clear();\r
-    mSessions = mDbHandler.getSessionList();\r
-    PreferenceScreen ps = getPreferenceScreen();\r
-    ps.removeAll();\r
-    addPreferencesFromResource(R.xml.preferences);\r
-    for (int i = 0; i < mSessions.size(); i++) {\r
-      Preference preference = new Preference(getBaseContext());\r
-      preference.setTitle(mSessions.get(i).getName());\r
-      URI uri;\r
-      try {\r
-        uri = new URI(mSessions.get(i).getUrl());\r
-      } catch (URISyntaxException e) {\r
-        e.printStackTrace(); // should never happen\r
-        continue;\r
-      }\r
-      preference.setSummary(uri.getScheme() + "://" + uri.getHost()+uri.getPath());\r
-      ps.addPreference(preference);\r
-    }\r
-  }\r
-  \r
-  /**\r
-   * Populates the account selector\r
-   */\r
-  private void populateAccountList(){\r
-         AccountManager accMan = AccountManager.get(this);\r
-         mAccounts = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
-         mAccountList = (ListPreference) findPreference("select_oc_account");\r
-         mAccountList.setOnPreferenceChangeListener(this);\r
-         \r
-         // Display the name of the current account if there is any\r
-         Account defaultAccount = AuthUtils.getCurrentOwnCloudAccount(this);\r
-         if(defaultAccount != null){\r
-                 mAccountList.setSummary(defaultAccount.name);\r
-         }\r
-         \r
-         // Transform accounts into array of string for preferences to use\r
-         String[] accNames = new String[mAccounts.length];\r
-         for(int i = 0; i < mAccounts.length; i++){\r
-                 Account account = mAccounts[i];\r
-                 accNames[i] = account.name;\r
-         }\r
-         \r
-         mAccountList.setEntries(accNames);\r
-         mAccountList.setEntryValues(accNames);\r
-  }\r
-\r
-  @Override\r
-  public boolean onCreateOptionsMenu(Menu menu) {\r
-    super.onCreateOptionsMenu(menu);\r
-    MenuInflater inflater = getSherlock().getMenuInflater();\r
-    inflater.inflate(R.menu.prefs_menu, menu);\r
-    return true;\r
-  }\r
-  \r
-  @Override\r
-  public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
-    super.onMenuItemSelected(featureId, item);\r
-    Intent intent;\r
-    \r
-    switch (item.getItemId()) {\r
-      case R.id.addSessionItem:\r
-        intent = new Intent(this, PreferencesNewSession.class);\r
-        startActivityForResult(intent, mNewSession);\r
-        break;\r
-      case R.id.SessionContextEdit:\r
-        intent = new Intent(this, PreferencesNewSession.class);\r
-        intent.putExtra("sessionId", mSessions.get(mSelectedMenuItem).getEntryId());\r
-        intent.putExtra("sessionName", mSessions.get(mSelectedMenuItem).getName());\r
-        intent.putExtra("sessionURL", mSessions.get(mSelectedMenuItem).getUrl());\r
-        startActivityForResult(intent, mEditSession);\r
-        break;\r
-      case R.id.SessionContextRemove:\r
-        OwnCloudSession ocs = mSessions.get(mSelectedMenuItem);\r
-        mDbHandler.removeSessionWithId(ocs.getEntryId());\r
-        mSessions.remove(ocs);\r
-        getPreferenceScreen().removePreference(getPreferenceScreen().getPreference(mSelectedMenuItem+1));\r
-        break;\r
-      case android.R.id.home:\r
-         intent = new Intent(getBaseContext(), LandingActivity.class);\r
-         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);\r
-         startActivity(intent);\r
-         break;\r
-      default:\r
-        Log.w(TAG, "Unknown menu item triggered");\r
-        return false;\r
-    }\r
-    return true;\r
-  }\r
-\r
-  @Override\r
-  protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
-    super.onActivityResult(requestCode, resultCode, data);\r
-    if (resultCode == Activity.RESULT_OK) {\r
-      switch (requestCode) {\r
-        case mNewSession:\r
-          mDbHandler.addSession(data.getStringExtra("sessionName"), \r
-                                data.getStringExtra("sessionURL"));\r
-          getPreferenceScreen().removeAll();\r
-          addPreferencesFromResource(R.xml.preferences);\r
-          populateSessionList();\r
-          break;\r
-        case mEditSession:\r
-          mDbHandler.changeSessionFields(data.getIntExtra("sessionId", -1),\r
-                                         data.getStringExtra("sessionName"),\r
-                                         data.getStringExtra("sessionURL"));\r
-          populateSessionList();\r
-          break;\r
-      }\r
-    }\r
-  }\r
-\r
-  @Override\r
-  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {\r
-    super.onCreateContextMenu(menu, v, menuInfo);\r
-    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;\r
-    mSelectedMenuItem = info.position-1;\r
-    menu.setHeaderTitle(mSessions.get(mSelectedMenuItem).getName());\r
-    \r
-    MenuInflater inflater = getSherlock().getMenuInflater();\r
-    inflater.inflate(R.menu.session_context_menu, (Menu) menu);\r
-    \r
-  }\r
-  \r
-  @Override\r
-  protected void onDestroy() {\r
-    mDbHandler.close();\r
-    super.onDestroy();\r
-  }\r
-\r
-@Override\r
-/**\r
- * Updates the summary of the account selector after a new account has \r
- * been selected\r
+ * \r
  */\r
-public boolean onPreferenceChange(Preference preference, Object newValue) {\r
-       if(preference.equals(mAccountList)) {\r
-               mAccountList.setSummary(newValue.toString());\r
+public class Preferences extends SherlockPreferenceActivity implements\r
+               OnPreferenceChangeListener {\r
+       private static final String TAG = "OwnCloudPreferences";\r
+       private final int mNewSession = 47;\r
+       private final int mEditSession = 48;\r
+       private DbHandler mDbHandler;\r
+       private Vector<OwnCloudSession> mSessions;\r
+       private Account[] mAccounts;\r
+       private ListPreference mAccountList;\r
+       private ListPreference mTrackingUpdateInterval;\r
+       private CheckBoxPreference mDeviceTracking;\r
+       private int mSelectedMenuItem;\r
+\r
+       @Override\r
+       public void onCreate(Bundle savedInstanceState) {\r
+               super.onCreate(savedInstanceState);\r
+               mDbHandler = new DbHandler(getBaseContext());\r
+               mSessions = new Vector<OwnCloudSession>();\r
+               addPreferencesFromResource(R.xml.preferences);\r
+               registerForContextMenu(getListView());\r
+               populateAccountList();\r
+               ActionBar actionBar = getSherlock().getActionBar();\r
+               actionBar.setDisplayHomeAsUpEnabled(true);\r
+\r
+               // Update summary for device tracking preference\r
+               mTrackingUpdateInterval = (ListPreference) findPreference("devicetracking_update_intervall");\r
+               String trackingSummary = getResources().getString(\r
+                               R.string.prefs_trackmydevice_interval_summary);\r
+               trackingSummary = String.format(trackingSummary,\r
+                               mTrackingUpdateInterval.getValue());\r
+               mTrackingUpdateInterval.setSummary(trackingSummary);\r
+               mTrackingUpdateInterval.setOnPreferenceChangeListener(this);\r
+\r
+               // Enable or disable device tracking service. Listen on events\r
+               mDeviceTracking = (CheckBoxPreference) findPreference("enable_devicetracking");\r
+               mDeviceTracking.setOnPreferenceChangeListener(this);\r
+               \r
+               // populateSessionList();\r
        }\r
-       return true;\r
-}\r
-  \r
+\r
+       private void populateSessionList() {\r
+               mSessions.clear();\r
+               mSessions = mDbHandler.getSessionList();\r
+               PreferenceScreen ps = getPreferenceScreen();\r
+               ps.removeAll();\r
+               addPreferencesFromResource(R.xml.preferences);\r
+               for (int i = 0; i < mSessions.size(); i++) {\r
+                       Preference preference = new Preference(getBaseContext());\r
+                       preference.setTitle(mSessions.get(i).getName());\r
+                       URI uri;\r
+                       try {\r
+                               uri = new URI(mSessions.get(i).getUrl());\r
+                       } catch (URISyntaxException e) {\r
+                               e.printStackTrace(); // should never happen\r
+                               continue;\r
+                       }\r
+                       preference.setSummary(uri.getScheme() + "://" + uri.getHost()\r
+                                       + uri.getPath());\r
+                       ps.addPreference(preference);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Populates the account selector\r
+        */\r
+       private void populateAccountList() {\r
+               AccountManager accMan = AccountManager.get(this);\r
+               mAccounts = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
+               mAccountList = (ListPreference) findPreference("select_oc_account");\r
+               mAccountList.setOnPreferenceChangeListener(this);\r
+\r
+               // Display the name of the current account if there is any\r
+               Account defaultAccount = AuthUtils.getCurrentOwnCloudAccount(this);\r
+               if (defaultAccount != null) {\r
+                       mAccountList.setSummary(defaultAccount.name);\r
+               }\r
+\r
+               // Transform accounts into array of string for preferences to use\r
+               String[] accNames = new String[mAccounts.length];\r
+               for (int i = 0; i < mAccounts.length; i++) {\r
+                       Account account = mAccounts[i];\r
+                       accNames[i] = account.name;\r
+               }\r
+\r
+               mAccountList.setEntries(accNames);\r
+               mAccountList.setEntryValues(accNames);\r
+       }\r
+\r
+       @Override\r
+       public boolean onCreateOptionsMenu(Menu menu) {\r
+               super.onCreateOptionsMenu(menu);\r
+               MenuInflater inflater = getSherlock().getMenuInflater();\r
+               inflater.inflate(R.menu.prefs_menu, menu);\r
+               return true;\r
+       }\r
+\r
+       @Override\r
+       public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
+               super.onMenuItemSelected(featureId, item);\r
+               Intent intent;\r
+\r
+               switch (item.getItemId()) {\r
+               case R.id.addSessionItem:\r
+                       intent = new Intent(this, PreferencesNewSession.class);\r
+                       startActivityForResult(intent, mNewSession);\r
+                       break;\r
+               case R.id.SessionContextEdit:\r
+                       intent = new Intent(this, PreferencesNewSession.class);\r
+                       intent.putExtra("sessionId", mSessions.get(mSelectedMenuItem)\r
+                                       .getEntryId());\r
+                       intent.putExtra("sessionName", mSessions.get(mSelectedMenuItem)\r
+                                       .getName());\r
+                       intent.putExtra("sessionURL", mSessions.get(mSelectedMenuItem)\r
+                                       .getUrl());\r
+                       startActivityForResult(intent, mEditSession);\r
+                       break;\r
+               case R.id.SessionContextRemove:\r
+                       OwnCloudSession ocs = mSessions.get(mSelectedMenuItem);\r
+                       mDbHandler.removeSessionWithId(ocs.getEntryId());\r
+                       mSessions.remove(ocs);\r
+                       getPreferenceScreen().removePreference(\r
+                                       getPreferenceScreen().getPreference(mSelectedMenuItem + 1));\r
+                       break;\r
+               case android.R.id.home:\r
+                       intent = new Intent(getBaseContext(), LandingActivity.class);\r
+                       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);\r
+                       startActivity(intent);\r
+                       break;\r
+               default:\r
+                       Log.w(TAG, "Unknown menu item triggered");\r
+                       return false;\r
+               }\r
+               return true;\r
+       }\r
+\r
+       @Override\r
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
+               super.onActivityResult(requestCode, resultCode, data);\r
+               if (resultCode == Activity.RESULT_OK) {\r
+                       switch (requestCode) {\r
+                       case mNewSession:\r
+                               mDbHandler.addSession(data.getStringExtra("sessionName"),\r
+                                               data.getStringExtra("sessionURL"));\r
+                               getPreferenceScreen().removeAll();\r
+                               addPreferencesFromResource(R.xml.preferences);\r
+                               populateSessionList();\r
+                               break;\r
+                       case mEditSession:\r
+                               mDbHandler.changeSessionFields(\r
+                                               data.getIntExtra("sessionId", -1),\r
+                                               data.getStringExtra("sessionName"),\r
+                                               data.getStringExtra("sessionURL"));\r
+                               populateSessionList();\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public void onCreateContextMenu(ContextMenu menu, View v,\r
+                       ContextMenuInfo menuInfo) {\r
+               super.onCreateContextMenu(menu, v, menuInfo);\r
+               AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;\r
+               mSelectedMenuItem = info.position - 1;\r
+               menu.setHeaderTitle(mSessions.get(mSelectedMenuItem).getName());\r
+\r
+               MenuInflater inflater = getSherlock().getMenuInflater();\r
+               inflater.inflate(R.menu.session_context_menu, (Menu) menu);\r
+\r
+       }\r
+\r
+       @Override\r
+       protected void onDestroy() {\r
+               mDbHandler.close();\r
+               super.onDestroy();\r
+       }\r
+\r
+       @Override\r
+       /**\r
+        * Updates various summaries after updates. Also starts and stops \r
+        * the\r
+        */\r
+       public boolean onPreferenceChange(Preference preference, Object newValue) {\r
+               // Update current account summary\r
+               if (preference.equals(mAccountList)) {\r
+                       mAccountList.setSummary(newValue.toString());\r
+               } \r
+               \r
+               // Update tracking interval summary\r
+               else if (preference.equals(mTrackingUpdateInterval)) {\r
+                       String trackingSummary = getResources().getString(\r
+                                       R.string.prefs_trackmydevice_interval_summary);\r
+                       trackingSummary = String.format(trackingSummary,\r
+                                       newValue.toString());\r
+                       mTrackingUpdateInterval.setSummary(trackingSummary);\r
+               } \r
+               \r
+               // Start or stop tracking service\r
+               else if (preference.equals(mDeviceTracking)) {\r
+                       Intent locationServiceIntent = new Intent();\r
+                       locationServiceIntent.setAction("eu.alefzero.owncloud.location.LocationLauncher");\r
+                       locationServiceIntent.putExtra("TRACKING_SETTING", (Boolean) newValue);\r
+                       sendBroadcast(locationServiceIntent);\r
+               }\r
+               return true;\r
+       }\r
+\r
 }\r