ManageSpaceActivity.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /**
  2. * ownCloud Android client application
  3. *
  4. * @author masensio
  5. * Copyright (C) 2016 ownCloud Inc.
  6. *
  7. * This program is free software: you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2,
  9. * as published by the Free Software Foundation.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. *
  19. */
  20. package com.owncloud.android.ui.activity;
  21. import android.content.SharedPreferences;
  22. import android.os.AsyncTask;
  23. import android.os.Bundle;
  24. import android.preference.PreferenceManager;
  25. import android.support.v7.app.ActionBar;
  26. import android.support.v7.app.AppCompatActivity;
  27. import android.view.MenuItem;
  28. import android.view.View;
  29. import android.widget.Button;
  30. import android.widget.TextView;
  31. import android.widget.Toast;
  32. import com.owncloud.android.R;
  33. import com.owncloud.android.lib.common.utils.Log_OC;
  34. import com.owncloud.android.utils.AnalyticsUtils;
  35. import java.io.File;
  36. public class ManageSpaceActivity extends AppCompatActivity {
  37. private static final String TAG = ManageSpaceActivity.class.getSimpleName();
  38. private static final String LIB_FOLDER = "lib";
  39. private static final String SCREEN_NAME = "Manage space";
  40. @Override
  41. protected void onCreate(Bundle savedInstanceState) {
  42. super.onCreate(savedInstanceState);
  43. setContentView(R.layout.activity_manage_space);
  44. ActionBar actionBar = getSupportActionBar();
  45. actionBar.setDisplayHomeAsUpEnabled(true);
  46. actionBar.setTitle(R.string.manage_space_title);
  47. TextView descriptionTextView = (TextView) findViewById(R.id.general_description);
  48. descriptionTextView.setText(getString(R.string.manage_space_description, getString(R.string.app_name)));
  49. Button clearDataButton = (Button) findViewById(R.id.clearDataButton);
  50. clearDataButton.setOnClickListener(new View.OnClickListener() {
  51. @Override
  52. public void onClick(View v) {
  53. ClearDataAsynTask clearDataTask = new ClearDataAsynTask();
  54. clearDataTask.execute();
  55. }
  56. });
  57. }
  58. @Override
  59. protected void onResume() {
  60. super.onResume();
  61. AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
  62. }
  63. @Override
  64. public boolean onOptionsItemSelected(MenuItem item) {
  65. boolean retval = true;
  66. switch (item.getItemId()) {
  67. case android.R.id.home:
  68. finish();
  69. break;
  70. default:
  71. Log_OC.w(TAG, "Unknown menu item triggered");
  72. retval = super.onOptionsItemSelected(item);
  73. break;
  74. }
  75. return retval;
  76. }
  77. /**
  78. * AsyncTask for Clear Data, saving the passcode
  79. */
  80. private class ClearDataAsynTask extends AsyncTask<Void, Void, Boolean>{
  81. @Override
  82. protected Boolean doInBackground(Void... params) {
  83. boolean result = true;
  84. // Save passcode from Share preferences
  85. SharedPreferences appPrefs = PreferenceManager
  86. .getDefaultSharedPreferences(getApplicationContext());
  87. boolean passCodeEnable = appPrefs.getBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, false);
  88. String passCodeDigits[] = new String[4];
  89. if (passCodeEnable) {
  90. passCodeDigits[0] = appPrefs.getString(PassCodeActivity.PREFERENCE_PASSCODE_D1, null);
  91. passCodeDigits[1] = appPrefs.getString(PassCodeActivity.PREFERENCE_PASSCODE_D2, null);
  92. passCodeDigits[2] = appPrefs.getString(PassCodeActivity.PREFERENCE_PASSCODE_D3, null);
  93. passCodeDigits[3] = appPrefs.getString(PassCodeActivity.PREFERENCE_PASSCODE_D4, null);
  94. }
  95. // Clear data
  96. result = clearApplicationData();
  97. // Clear SharedPreferences
  98. SharedPreferences.Editor appPrefsEditor = PreferenceManager
  99. .getDefaultSharedPreferences(getApplicationContext()).edit();
  100. appPrefsEditor.clear();
  101. result = result && appPrefsEditor.commit();
  102. // Recover passcode
  103. if (passCodeEnable) {
  104. appPrefsEditor.putString(PassCodeActivity.PREFERENCE_PASSCODE_D1, passCodeDigits[0]);
  105. appPrefsEditor.putString(PassCodeActivity.PREFERENCE_PASSCODE_D2, passCodeDigits[1]);
  106. appPrefsEditor.putString(PassCodeActivity.PREFERENCE_PASSCODE_D3, passCodeDigits[2]);
  107. appPrefsEditor.putString(PassCodeActivity.PREFERENCE_PASSCODE_D4, passCodeDigits[3]);
  108. }
  109. appPrefsEditor.putBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, passCodeEnable);
  110. result = result && appPrefsEditor.commit();
  111. return result;
  112. }
  113. @Override
  114. protected void onPostExecute(Boolean result) {
  115. super.onPostExecute(result);
  116. if (!result) {
  117. Toast.makeText(getApplicationContext(),
  118. getString(R.string.manage_space_clear_data),
  119. Toast.LENGTH_LONG).show();
  120. } else {
  121. finish();
  122. System.exit(0);
  123. }
  124. }
  125. public boolean clearApplicationData() {
  126. boolean clearResult = true;
  127. File appDir = new File(getCacheDir().getParent());
  128. if (appDir.exists()) {
  129. String[] children = appDir.list();
  130. if (children != null) {
  131. for (String s : children) {
  132. if (!LIB_FOLDER.equals(s)) {
  133. File fileToDelete = new File(appDir, s);
  134. clearResult = clearResult && deleteDir(fileToDelete);
  135. Log_OC.d(TAG, "Clear Application Data, File: " + fileToDelete.getName() + " DELETED *****");
  136. }
  137. }
  138. } else {
  139. clearResult = false;
  140. }
  141. }
  142. return clearResult;
  143. }
  144. public boolean deleteDir(File dir) {
  145. if (dir != null && dir.isDirectory()) {
  146. String[] children = dir.list();
  147. if (children != null) {
  148. for (int i = 0; i < children.length; i++) {
  149. boolean success = deleteDir(new File(dir, children[i]));
  150. if (!success) {
  151. Log_OC.w(TAG, "File NOT deleted " + children[i]);
  152. return false;
  153. } else {
  154. Log_OC.d(TAG, "File deleted " + children[i]);
  155. }
  156. }
  157. } else {
  158. return false;
  159. }
  160. }
  161. return dir.delete();
  162. }
  163. }
  164. }