aboutsummaryrefslogtreecommitdiff
path: root/ime/app/src
diff options
context:
space:
mode:
authorlubenard <lubenard@student.42.fr>2020-07-05 15:39:50 +0000
committerlubenard <lubenard@student.42.fr>2020-07-05 15:39:50 +0000
commit4533294f76e05688dedfbae958edb5eade78b239 (patch)
treeb54f4d94dc0b23f051b5681b240b2eeb7c5b9cc9 /ime/app/src
parent38bf8e3cad645244edaf906b8fd8f01565e8e72a (diff)
downloadAnySoftKeyboard-4533294f76e05688dedfbae958edb5eade78b239.tar.gz
AnySoftKeyboard-4533294f76e05688dedfbae958edb5eade78b239.tar.bz2
Fixed bugs, added option to refresh for fileExplorer + passed lint
Diffstat (limited to 'ime/app/src')
-rw-r--r--ime/app/src/main/java/com/anysoftkeyboard/prefs/GlobalPrefsBackup.java9
-rw-r--r--ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerCreate.java157
-rw-r--r--ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerRestore.java112
-rw-r--r--ime/app/src/main/java/com/anysoftkeyboard/ui/settings/MainFragment.java34
-rw-r--r--ime/app/src/main/res/drawable-hdpi/ic_menu_add.pngbin0 -> 135 bytes
-rw-r--r--ime/app/src/main/res/drawable-hdpi/ic_menu_refresh.pngbin0 -> 707 bytes
-rw-r--r--ime/app/src/main/res/drawable-mdpi/ic_menu_add.pngbin0 -> 117 bytes
-rw-r--r--ime/app/src/main/res/drawable-mdpi/ic_menu_refresh.pngbin0 -> 448 bytes
-rw-r--r--ime/app/src/main/res/drawable-xhdpi/ic_menu_add.pngbin0 -> 148 bytes
-rw-r--r--ime/app/src/main/res/drawable-xhdpi/ic_menu_refresh.pngbin0 -> 915 bytes
-rw-r--r--ime/app/src/main/res/drawable-xxhdpi/ic_menu_add.pngbin0 -> 206 bytes
-rw-r--r--ime/app/src/main/res/drawable-xxhdpi/ic_menu_refresh.pngbin0 -> 1541 bytes
-rw-r--r--ime/app/src/main/res/drawable-xxxhdpi/ic_menu_add.pngbin0 -> 251 bytes
-rw-r--r--ime/app/src/main/res/drawable-xxxhdpi/ic_menu_refresh.pngbin0 -> 2070 bytes
-rw-r--r--ime/app/src/main/res/menu/file_explorer_create_menu.xml10
-rw-r--r--ime/app/src/main/res/values/strings.xml9
16 files changed, 197 insertions, 134 deletions
diff --git a/ime/app/src/main/java/com/anysoftkeyboard/prefs/GlobalPrefsBackup.java b/ime/app/src/main/java/com/anysoftkeyboard/prefs/GlobalPrefsBackup.java
index 77b1c2445..b9e9e136d 100644
--- a/ime/app/src/main/java/com/anysoftkeyboard/prefs/GlobalPrefsBackup.java
+++ b/ime/app/src/main/java/com/anysoftkeyboard/prefs/GlobalPrefsBackup.java
@@ -6,7 +6,6 @@ import android.support.annotation.StringRes;
import android.support.annotation.VisibleForTesting;
import android.support.v4.util.Pair;
import android.support.v7.preference.PreferenceManager;
-
import com.anysoftkeyboard.base.utils.Logger;
import com.anysoftkeyboard.dictionaries.ExternalDictionaryFactory;
import com.anysoftkeyboard.dictionaries.prefsprovider.UserDictionaryPrefsProvider;
@@ -138,18 +137,16 @@ public class GlobalPrefsBackup {
prefsRoot -> prefsRootFinalizer.accept(storage, prefsRoot));
}
- public static void updateCustomFilename(File filename)
- {
+ public static void updateCustomFilename(File filename) {
customFilename = filename;
}
public static File getBackupFile() {
File tempFilename;
- if (customFilename == null)
- return AnyApplication.getBackupFile(GLOBAL_BACKUP_FILENAME);
+ if (customFilename == null) return AnyApplication.getBackupFile(GLOBAL_BACKUP_FILENAME);
else {
- //We reset the customFilename
+ // We reset the customFilename
tempFilename = customFilename;
customFilename = null;
return tempFilename;
diff --git a/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerCreate.java b/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerCreate.java
index d4a367620..4993a36df 100644
--- a/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerCreate.java
+++ b/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerCreate.java
@@ -1,10 +1,13 @@
package com.anysoftkeyboard.ui;
+import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.util.Pair;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@@ -12,58 +15,54 @@ import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
-
import com.anysoftkeyboard.base.utils.Logger;
import com.anysoftkeyboard.prefs.GlobalPrefsBackup;
import com.anysoftkeyboard.rx.RxSchedulers;
import com.anysoftkeyboard.ui.settings.MainFragment;
import com.menny.android.anysoftkeyboard.R;
-
-import net.evendanan.pixel.RxProgressDialog;
-
-import java.io.File;
import io.reactivex.disposables.Disposable;
+import java.io.File;
+import net.evendanan.pixel.RxProgressDialog;
public class FileExplorerCreate extends AppCompatActivity {
private ListView listViewFiles;
private File currentFolder;
private File basePath;
- public void listFile(File basePath)
- {
+ public void listFile(File basePath) {
File[] files = basePath.listFiles();
- ArrayAdapter<File> adapter = new ArrayAdapter<File>(this,
- R.layout.file_explorer_single_item, files);
+ ArrayAdapter<File> adapter =
+ new ArrayAdapter<File>(this, R.layout.file_explorer_single_item, files);
listViewFiles.setAdapter(adapter);
- //Set onclickListener for all element of listView
- listViewFiles.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- Object o = listViewFiles.getItemAtPosition(position);
- if (new File(o.toString()).isDirectory()) {
- currentFolder = new File(o.toString());
- setTitle(o.toString());
- listFile(currentFolder);
- }
- }
- });
+ // Set onclickListener for all element of listView
+ listViewFiles.setOnItemClickListener(
+ new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(
+ AdapterView<?> parent, View view, int position, long id) {
+ Object o = listViewFiles.getItemAtPosition(position);
+ if (new File(o.toString()).isDirectory()) {
+ currentFolder = new File(o.toString());
+ setTitle(o.toString());
+ listFile(currentFolder);
+ } else if (new File(o.toString()).isFile())
+ create_builder(new File(o.toString()));
+ }
+ });
}
@Override
public void onBackPressed() {
- if (!currentFolder.equals(basePath))
- {
+ if (!currentFolder.equals(basePath)) {
int sep = currentFolder.toString().lastIndexOf("/");
setTitle(currentFolder.toString().substring(0, sep));
- listFile(new File(currentFolder.toString().substring(0, sep)));
- }
- else
- finish();
+ currentFolder = new File(currentFolder.toString().substring(0, sep));
+ listFile(currentFolder);
+ } else finish();
}
- public void emptyFilenameError()
- {
+ public void emptyFilenameError() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(R.string.file_explorer_filename_empty);
alertDialogBuilder.setPositiveButton(android.R.string.ok, null);
@@ -71,32 +70,85 @@ public class FileExplorerCreate extends AppCompatActivity {
dialog.show();
}
- public Disposable launch_backup(File fileOutput)
- {
+ public Disposable launch_backup(String fileOutput) {
return RxProgressDialog.create(
- new Pair<>(MainFragment.supportedProviders, MainFragment.checked),
- this,
- getText(R.string.take_a_while_progress_message),
- R.layout.progress_window)
+ new Pair<>(MainFragment.supportedProviders, MainFragment.checked),
+ this,
+ getText(R.string.take_a_while_progress_message),
+ R.layout.progress_window)
.subscribeOn(RxSchedulers.background())
.flatMap(GlobalPrefsBackup::backup)
.observeOn(RxSchedulers.mainThread())
.subscribe(
providerDetails ->
Logger.i(
- "MainFragment",
+ "FileExplorerCreate",
"Finished backing up %s",
providerDetails.provider.providerId()),
e -> {
Logger.w(
- "MainFragment",
+ "FileExplorerCreate",
e,
"Failed to do operation due to %s",
e.getMessage());
- Toast.makeText(getApplicationContext(), "Your data have failed to be saved", Toast.LENGTH_LONG).show();
+ Toast.makeText(
+ getApplicationContext(),
+ this.getString(R.string.file_explorer_backup_failed),
+ Toast.LENGTH_LONG)
+ .show();
},
() ->
- Toast.makeText(getApplicationContext(), "Your data have been saved to " + fileOutput.toString(), Toast.LENGTH_LONG).show());
+ Toast.makeText(
+ getApplicationContext(),
+ this.getString(
+ R.string
+ .file_explorer_backup_success)
+ + fileOutput,
+ Toast.LENGTH_LONG)
+ .show());
+ }
+
+ public void create_builder(File outputFile) {
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.file_explorer_alert_title)
+ .setMessage(R.string.file_explorer_backup_alert_message)
+ .setPositiveButton(
+ android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ launch_backup(outputFile.toString());
+ finish();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .show();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.file_explorer_create_menu, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.file_explorer_menu_add_folder:
+ new File(currentFolder.toString() + "/askBackup").mkdir();
+ Toast.makeText(
+ getApplicationContext(),
+ "Folder askBackup has been created at " + currentFolder.toString(),
+ Toast.LENGTH_LONG)
+ .show();
+ listFile(currentFolder);
+ return true;
+ case R.id.file_explorer_menu_refresh:
+ listFile(currentFolder);
+ return true;
+ }
+ return false;
}
@Override
@@ -116,21 +168,26 @@ public class FileExplorerCreate extends AppCompatActivity {
listFile(basePath);
- filenameButton.setOnClickListener(new View.OnClickListener() {
+ filenameButton.setOnClickListener(
+ new View.OnClickListener() {
@Override
public void onClick(View v) {
- if (filenameTextView.length() > 0)
- {
- final File fileOutput = new File(currentFolder + "/" + filenameTextView.getText().toString() + ".xml");
+ if (filenameTextView.length() > 0) {
+ final File fileOutput =
+ new File(
+ currentFolder
+ + "/"
+ + filenameTextView.getText().toString()
+ + ".xml");
GlobalPrefsBackup.updateCustomFilename(fileOutput);
- launch_backup(fileOutput);
-
- finish();
- }
- else
- emptyFilenameError();
+ if (fileOutput.exists()) create_builder(fileOutput);
+ else {
+ launch_backup(fileOutput.toString());
+ finish();
+ }
+ } else emptyFilenameError();
}
- });
+ });
}
}
diff --git a/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerRestore.java b/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerRestore.java
index 8eeb66741..420996f83 100644
--- a/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerRestore.java
+++ b/ime/app/src/main/java/com/anysoftkeyboard/ui/FileExplorerRestore.java
@@ -11,105 +11,108 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
-
import com.anysoftkeyboard.base.utils.Logger;
import com.anysoftkeyboard.prefs.GlobalPrefsBackup;
import com.anysoftkeyboard.rx.RxSchedulers;
import com.anysoftkeyboard.ui.settings.MainFragment;
import com.menny.android.anysoftkeyboard.R;
-
-import net.evendanan.pixel.RxProgressDialog;
-
-import java.io.File;
-
import io.reactivex.disposables.Disposable;
+import java.io.File;
+import net.evendanan.pixel.RxProgressDialog;
public class FileExplorerRestore extends AppCompatActivity {
private ListView listViewFiles;
private File basePath;
private File currentFolder;
- private Disposable launch_restore() {
+ private Disposable launch_restore(String fileName) {
return RxProgressDialog.create(
- new Pair<>(MainFragment.supportedProviders, MainFragment.checked),
- this,
- getText(R.string.take_a_while_progress_message),
- R.layout.progress_window)
+ new Pair<>(MainFragment.supportedProviders, MainFragment.checked),
+ this,
+ getText(R.string.take_a_while_progress_message),
+ R.layout.progress_window)
.subscribeOn(RxSchedulers.background())
.flatMap(GlobalPrefsBackup::restore)
.observeOn(RxSchedulers.mainThread())
.subscribe(
providerDetails ->
Logger.i(
- "MainFragment",
+ "FileExplorerRestore",
"Finished restore up %s",
providerDetails.provider.providerId()),
e -> {
Logger.w(
- "MainFragment",
+ "FileExplorerRestore",
e,
"Failed to do operation due to %s",
e.getMessage());
- Toast.makeText(getApplicationContext(), "Your data have failed to be restored", Toast.LENGTH_LONG).show();
+ Toast.makeText(
+ getApplicationContext(),
+ this.getString(R.string.file_explorer_restore_failed),
+ Toast.LENGTH_LONG)
+ .show();
},
() ->
- Toast.makeText(getApplicationContext(), "Your data have been restored", Toast.LENGTH_LONG).show());
+ Toast.makeText(
+ getApplicationContext(),
+ this.getString(
+ R.string
+ .file_explorer_restore_success)
+ + fileName,
+ Toast.LENGTH_LONG)
+ .show());
}
- public void create_builder(){
+ public void create_builder(File fileOutput) {
new AlertDialog.Builder(this)
- .setTitle("Select this file ?")
- .setMessage("Do you want to restore this file ?")
-
- // The dialog is automatically dismissed when a dialog button is clicked.
- .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- launch_restore();
- finish();
- }
- })
-
- // A null listener allows the button to dismiss the dialog and take no further action.
+ .setTitle(R.string.file_explorer_alert_title)
+ .setMessage(R.string.file_explorer_restore_alert_message)
+ .setPositiveButton(
+ android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ GlobalPrefsBackup.updateCustomFilename(fileOutput);
+ launch_restore(fileOutput.toString());
+ finish();
+ }
+ })
.setNegativeButton(android.R.string.cancel, null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
-
}
- public void listFile(File basePath)
- {
+ public void listFile(File basePath) {
File[] files = basePath.listFiles();
- ArrayAdapter<File> adapter = new ArrayAdapter<File>(this,
- R.layout.file_explorer_single_item, files);
+ ArrayAdapter<File> adapter =
+ new ArrayAdapter<File>(this, R.layout.file_explorer_single_item, files);
listViewFiles.setAdapter(adapter);
- //Set onclickListener for all element of listView
- listViewFiles.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- Object o = listViewFiles.getItemAtPosition(position);
- if (new File(o.toString()).isDirectory()) {
- currentFolder = new File(o.toString());
- setTitle(o.toString());
- listFile(currentFolder);
- }
- else if (new File(o.toString()).isFile())
- create_builder();
- }
- });
+ // Set onclickListener for all element of listView
+ listViewFiles.setOnItemClickListener(
+ new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(
+ AdapterView<?> parent, View view, int position, long id) {
+ Object o = listViewFiles.getItemAtPosition(position);
+ if (new File(o.toString()).isDirectory()) {
+ currentFolder = new File(o.toString());
+ setTitle(o.toString());
+ listFile(currentFolder);
+ } else if (new File(o.toString()).isFile())
+ create_builder(new File(o.toString()));
+ }
+ });
}
@Override
public void onBackPressed() {
- if (!currentFolder.equals(basePath))
- {
+ if (!currentFolder.equals(basePath)) {
int sep = currentFolder.toString().lastIndexOf("/");
setTitle(currentFolder.toString().substring(0, sep));
- listFile(new File(currentFolder.toString().substring(0, sep)));
- }
- else
- finish();
+ currentFolder = new File(currentFolder.toString().substring(0, sep));
+ listFile(currentFolder);
+ } else finish();
}
@Override
@@ -127,5 +130,4 @@ public class FileExplorerRestore extends AppCompatActivity {
listFile(basePath);
}
-
}
diff --git a/ime/app/src/main/java/com/anysoftkeyboard/ui/settings/MainFragment.java b/ime/app/src/main/java/com/anysoftkeyboard/ui/settings/MainFragment.java
index 51e79f919..f5f728af9 100644
--- a/ime/app/src/main/java/com/anysoftkeyboard/ui/settings/MainFragment.java
+++ b/ime/app/src/main/java/com/anysoftkeyboard/ui/settings/MainFragment.java
@@ -54,6 +54,7 @@ import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.disposables.Disposables;
import io.reactivex.functions.Function;
+import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
@@ -76,7 +77,8 @@ public class MainFragment extends Fragment {
static int failedDialog;
public static List<GlobalPrefsBackup.ProviderDetails> supportedProviders;
public static Boolean[] checked;
- static Function<Pair<List<GlobalPrefsBackup.ProviderDetails>, Boolean[]>,
+ static Function<
+ Pair<List<GlobalPrefsBackup.ProviderDetails>, Boolean[]>,
ObservableSource<GlobalPrefsBackup.ProviderDetails>>
action;
@@ -415,15 +417,14 @@ public class MainFragment extends Fragment {
mDisposable.dispose();
mDisposable = new CompositeDisposable();
- mDisposable.add(launchBackupRestore());
+ mDisposable.add(launchBackupRestore(0, null));
});
builder.setNeutralButton(
choosePathString,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
- {
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent dataToFileChooser = new Intent();
dataToFileChooser.setType("text/xml");
dataToFileChooser.setAction(actionCustomPath);
@@ -433,18 +434,17 @@ public class MainFragment extends Fragment {
} catch (ActivityNotFoundException e) {
Logger.e(TAG, "Could not launch the custom path activity");
Toast.makeText(
- getActivity().getApplicationContext(),
- R.string.toast_error_custom_path_backup,
- Toast.LENGTH_LONG)
- .show();
+ getActivity().getApplicationContext(),
+ R.string.toast_error_custom_path_backup,
+ Toast.LENGTH_LONG)
+ .show();
}
} else {
Intent intent = null;
- if (optionId == R.id.backup_prefs){
+ if (optionId == R.id.backup_prefs) {
intent = new Intent(getContext(), FileExplorerCreate.class);
- }
- else if (optionId == R.id.restore_prefs){
+ } else if (optionId == R.id.restore_prefs) {
intent = new Intent(getContext(), FileExplorerRestore.class);
}
startActivity(intent);
@@ -453,7 +453,11 @@ public class MainFragment extends Fragment {
});
}
- private Disposable launchBackupRestore() {
+ private Disposable launchBackupRestore(int custom, Uri customUri) {
+ File filePath;
+ if (custom == 1) filePath = new File(customUri.getPath());
+ else filePath = GlobalPrefsBackup.getBackupFile();
+
return RxProgressDialog.create(
new Pair<>(supportedProviders, checked),
getActivity(),
@@ -476,9 +480,7 @@ public class MainFragment extends Fragment {
e.getMessage());
mDialogController.showDialog(failedDialog, e.getMessage());
},
- () ->
- mDialogController.showDialog(
- successDialog, GlobalPrefsBackup.getBackupFile()));
+ () -> mDialogController.showDialog(successDialog, filePath));
}
public void launchRestoreCustomFileData(InputStream inputStream) {
@@ -512,7 +514,7 @@ public class MainFragment extends Fragment {
Logger.d(TAG, "Launching Backup");
launchBackupCustomFileData(resolver.openOutputStream(data.getData()));
}
- launchBackupRestore();
+ launchBackupRestore(1, data.getData());
} catch (Exception e) {
e.printStackTrace();
Logger.d(TAG, "Error when getting inputStream on onActivityResult");
diff --git a/ime/app/src/main/res/drawable-hdpi/ic_menu_add.png b/ime/app/src/main/res/drawable-hdpi/ic_menu_add.png
new file mode 100644
index 000000000..9375e30cd
--- /dev/null
+++ b/ime/app/src/main/res/drawable-hdpi/ic_menu_add.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-hdpi/ic_menu_refresh.png b/ime/app/src/main/res/drawable-hdpi/ic_menu_refresh.png
new file mode 100644
index 000000000..7b58598fe
--- /dev/null
+++ b/ime/app/src/main/res/drawable-hdpi/ic_menu_refresh.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-mdpi/ic_menu_add.png b/ime/app/src/main/res/drawable-mdpi/ic_menu_add.png
new file mode 100644
index 000000000..f3bf34a97
--- /dev/null
+++ b/ime/app/src/main/res/drawable-mdpi/ic_menu_add.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-mdpi/ic_menu_refresh.png b/ime/app/src/main/res/drawable-mdpi/ic_menu_refresh.png
new file mode 100644
index 000000000..4b9605ebe
--- /dev/null
+++ b/ime/app/src/main/res/drawable-mdpi/ic_menu_refresh.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-xhdpi/ic_menu_add.png b/ime/app/src/main/res/drawable-xhdpi/ic_menu_add.png
new file mode 100644
index 000000000..fd8e0d8ca
--- /dev/null
+++ b/ime/app/src/main/res/drawable-xhdpi/ic_menu_add.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-xhdpi/ic_menu_refresh.png b/ime/app/src/main/res/drawable-xhdpi/ic_menu_refresh.png
new file mode 100644
index 000000000..2d5addc8d
--- /dev/null
+++ b/ime/app/src/main/res/drawable-xhdpi/ic_menu_refresh.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-xxhdpi/ic_menu_add.png b/ime/app/src/main/res/drawable-xxhdpi/ic_menu_add.png
new file mode 100644
index 000000000..e4380b31e
--- /dev/null
+++ b/ime/app/src/main/res/drawable-xxhdpi/ic_menu_add.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-xxhdpi/ic_menu_refresh.png b/ime/app/src/main/res/drawable-xxhdpi/ic_menu_refresh.png
new file mode 100644
index 000000000..8df39b56a
--- /dev/null
+++ b/ime/app/src/main/res/drawable-xxhdpi/ic_menu_refresh.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-xxxhdpi/ic_menu_add.png b/ime/app/src/main/res/drawable-xxxhdpi/ic_menu_add.png
new file mode 100644
index 000000000..405a672b7
--- /dev/null
+++ b/ime/app/src/main/res/drawable-xxxhdpi/ic_menu_add.png
Binary files differ
diff --git a/ime/app/src/main/res/drawable-xxxhdpi/ic_menu_refresh.png b/ime/app/src/main/res/drawable-xxxhdpi/ic_menu_refresh.png
new file mode 100644
index 000000000..4c0269eea
--- /dev/null
+++ b/ime/app/src/main/res/drawable-xxxhdpi/ic_menu_refresh.png
Binary files differ
diff --git a/ime/app/src/main/res/menu/file_explorer_create_menu.xml b/ime/app/src/main/res/menu/file_explorer_create_menu.xml
index a869f2191..7c08d59cc 100644
--- a/ime/app/src/main/res/menu/file_explorer_create_menu.xml
+++ b/ime/app/src/main/res/menu/file_explorer_create_menu.xml
@@ -2,11 +2,9 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
- <item android:id="@+id/create_folder" android:icon="@android:drawable/ic_menu_add"
- android:title="@string/file_explorer_menu_add_folder" app:showAsAction="never|withText" />
-
- <item android:id="@+id/refresh_folder" android:icon="@android:drawable/ic_menu_view"
- android:title="@string/file_explorer_menu_refresh"
- app:showAsAction="never|withText" />
+ <item android:id="@+id/file_explorer_menu_add_folder" android:icon="@drawable/ic_menu_add"
+ android:title="@string/file_explorer_menu_add_folder" app:showAsAction="ifRoom|never" />
+ <item android:id="@+id/file_explorer_menu_refresh" android:icon="@drawable/ic_menu_refresh"
+ android:title="@string/file_explorer_menu_add_folder" app:showAsAction="ifRoom|never" />
</menu> \ No newline at end of file
diff --git a/ime/app/src/main/res/values/strings.xml b/ime/app/src/main/res/values/strings.xml
index cfdba833c..b1307e588 100644
--- a/ime/app/src/main/res/values/strings.xml
+++ b/ime/app/src/main/res/values/strings.xml
@@ -740,9 +740,16 @@
<string name="file_explorer_menu_refresh">Refresh</string>
<string name="file_explorer_filename">Backup filename...</string>
<string name="file_explorer_filename_empty">Filename cannot be empty...</string>
+ <string name="file_explorer_alert_title">Select this file ?</string>
+ <string name="file_explorer_restore_alert_message">Do you want to restore this file ?</string>
+ <string name="file_explorer_backup_alert_message">This file will be overwritten.</string>
- <string name="about_additional_software_licenses">Additional Software Licenses</string>
+ <string name="file_explorer_backup_success">Your data have been saved to\u0020</string>
+ <string name="file_explorer_backup_failed">Your data have failed to ba saved.</string>
+ <string name="file_explorer_restore_success">Your data have been restored from\u0020</string>
+ <string name="file_explorer_restore_failed">Your data have failed to be restored.</string>
+ <string name="about_additional_software_licenses">Additional Software Licenses</string>
<string name="setup_wizard_step_one_title">Enable AnySoftKeyboard</string>
<string name="setup_wizard_step_one_details">In this step, you\'ll need to enable <i>