From 2bfbb72302724f0a6f4e057dcf98b96cdace0f0e Mon Sep 17 00:00:00 2001 From: Anuja Shetye <55632820+shetyeanuja@users.noreply.github.com> Date: Thu, 6 Oct 2022 14:23:07 +0530 Subject: [PATCH 01/31] File external storage --- app/build.gradle | 38 ++- .../ExampleInstrumentedUnitTests.java | 4 +- .../MainActivityInstrumentedUnitTests.java | 10 +- .../PackageNameInstrumentedUnitTest.java | 8 +- ...toragePermissionInstrumentedUnitTests.java | 12 +- ...toragePermissionInstrumentedUnitTests.java | 10 +- ...eferenceActivityInstrumentedUnitTests.java | 14 +- ...iplineNameInstrumentedIntegratedTests.java | 30 +- ...chMySpaceActivityInstrumentedUnitTest.java | 40 +-- app/src/main/AndroidManifest.xml | 22 +- .../memoryassistant/disciplines/Cards.java | 127 +++++-- .../disciplines/DisciplineFragment.java | 32 +- .../memoryassistant/disciplines/Numbers.java | 109 ++++-- .../memoryassistant/main/Contribute.java | 5 +- .../main/CrashlyticsLogTree.java | 14 +- .../memoryassistant/main/CreditsActivity.java | 2 + .../main/DisciplineActivity.java | 6 +- .../memoryassistant/main/Learn.java | 6 +- .../memoryassistant/main/MainActivity.java | 30 +- .../memoryassistant/main/Practice.java | 3 + .../memoryassistant/main/RecallSelector.java | 37 +- .../memoryassistant/mySpace/MySpace.java | 34 +- .../mySpace/MySpaceFragment.java | 31 +- .../main/res/raw-b+fil/lesson_equations.txt | 18 - .../main/res/raw-b+fil/lesson_language.txt | 9 - .../res/raw-b+fil/lesson_major_system.txt | 77 ----- .../res/raw-b+fil/lesson_method_of_loci.txt | 40 --- app/src/main/res/raw-b+fil/lesson_pao.txt | 37 -- .../raw-b+fil/lesson_perfect_association.txt | 57 ---- .../main/res/raw-b+fil/lesson_wardrobes.txt | 129 ------- app/src/main/res/values-b+fil/strings.xml | 316 +++++++++--------- app/src/main/res/values-fil/strings.xml | 316 +++++++++--------- .../memoryassistant/ExampleUnitTest.java | 4 +- build.gradle | 9 +- gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 88 +++-- gradlew.bat | 30 +- 37 files changed, 863 insertions(+), 894 deletions(-) delete mode 100644 app/src/main/res/raw-b+fil/lesson_equations.txt delete mode 100644 app/src/main/res/raw-b+fil/lesson_language.txt delete mode 100644 app/src/main/res/raw-b+fil/lesson_major_system.txt delete mode 100644 app/src/main/res/raw-b+fil/lesson_method_of_loci.txt delete mode 100644 app/src/main/res/raw-b+fil/lesson_pao.txt delete mode 100644 app/src/main/res/raw-b+fil/lesson_perfect_association.txt delete mode 100644 app/src/main/res/raw-b+fil/lesson_wardrobes.txt diff --git a/app/build.gradle b/app/build.gradle index 5accc580..70f48093 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,23 +9,23 @@ buildscript { } apply plugin: 'com.android.application' apply plugin: 'com.google.firebase.firebase-perf' -apply plugin: 'io.fabric' +//apply plugin: 'io.fabric' apply plugin: 'kotlin-android' //apply plugin: 'com.jakewharton.hugo' -def keystorePropertiesFile = rootProject.file("other/.keystore.properties") -def keystoreProperties = new Properties() -keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +//def keystorePropertiesFile = rootProject.file("other/.keystore.properties") +//def keystoreProperties = new Properties() +//keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { - signingConfigs { - config { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile file(keystoreProperties['storeFile']) - storePassword keystoreProperties['storePassword'] - } - } +// signingConfigs { +// config { +// keyAlias keystoreProperties['keyAlias'] +// keyPassword keystoreProperties['keyPassword'] +// storeFile file(keystoreProperties['storeFile']) +// storePassword keystoreProperties['storePassword'] +// } +// } compileSdkVersion 29 buildToolsVersion '28.0.3' defaultConfig { @@ -45,9 +45,10 @@ android { //minifyEnabled true //shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.config + //signingConfig signingConfigs.config } } + productFlavors { } aaptOptions { @@ -75,24 +76,29 @@ dependencies { implementation 'com.firebase:firebase-jobdispatcher:0.8.5' implementation 'com.google.firebase:firebase-core:17.2.3' implementation 'com.google.firebase:firebase-perf:19.0.5' - implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' + //implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' implementation 'org.solovyev.android:checkout:1.2.2' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.jakewharton.timber:timber:4.7.1' implementation 'com.jakewharton:butterknife:' + butterknifeVersion + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.junit.jupiter:junit-jupiter' + annotationProcessor 'com.jakewharton:butterknife-compiler:' + butterknifeVersion implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:rules:1.0.2' + //noinspection GradleCompatible + androidTestImplementation 'androidx.test:rules:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-intents:' + espressoVersion androidTestImplementation 'androidx.test.espresso:espresso-core:' + espressoVersion } repositories { mavenCentral() - maven { url 'https://maven.fabric.io/public' } + //maven { url 'https://maven.fabric.io/public' } } apply plugin: 'com.google.gms.google-services' diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/ExampleInstrumentedUnitTests.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/ExampleInstrumentedUnitTests.java index e21abc8a..9b3a7b9d 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/ExampleInstrumentedUnitTests.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/ExampleInstrumentedUnitTests.java @@ -1,5 +1,7 @@ package com.memory_athlete.memoryassistant; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; + import android.content.Intent; import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner; @@ -7,8 +9,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; - @RunWith(AndroidJUnit4ClassRunner.class) public class ExampleInstrumentedUnitTests { diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/MainActivityInstrumentedUnitTests.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/MainActivityInstrumentedUnitTests.java index 0d6e41a1..2a4ba8a3 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/MainActivityInstrumentedUnitTests.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/MainActivityInstrumentedUnitTests.java @@ -1,5 +1,10 @@ package com.memory_athlete.memoryassistant; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; +import static org.junit.Assert.assertEquals; + import android.content.SharedPreferences; import android.widget.ListView; @@ -19,11 +24,6 @@ import java.util.Random; import java.util.Scanner; -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; -import static org.junit.Assert.assertEquals; - @RunWith(AndroidJUnit4ClassRunner.class) public class MainActivityInstrumentedUnitTests { diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/PackageNameInstrumentedUnitTest.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/PackageNameInstrumentedUnitTest.java index 994fece2..0dd27d11 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/PackageNameInstrumentedUnitTest.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/PackageNameInstrumentedUnitTest.java @@ -1,16 +1,16 @@ package com.memory_athlete.memoryassistant; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; +import static org.junit.Assert.assertEquals; + import android.content.Context; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner; +import androidx.test.platform.app.InstrumentationRegistry; import org.junit.Test; import org.junit.runner.RunWith; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; -import static org.junit.Assert.assertEquals; - /** * Instrumentation test, which will execute on an Android device. * diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithStoragePermissionInstrumentedUnitTests.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithStoragePermissionInstrumentedUnitTests.java index 5c885c14..f87f6279 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithStoragePermissionInstrumentedUnitTests.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithStoragePermissionInstrumentedUnitTests.java @@ -1,5 +1,11 @@ package com.memory_athlete.memoryassistant; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static androidx.core.content.PermissionChecker.checkSelfPermission; +import static com.memory_athlete.memoryassistant.Helper.APP_FOLDER; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; + import android.content.pm.PackageManager; import android.os.Build; @@ -17,12 +23,6 @@ import java.io.IOException; import java.nio.file.Files; -import static android.Manifest.permission.READ_EXTERNAL_STORAGE; -import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; -import static androidx.core.content.PermissionChecker.checkSelfPermission; -import static com.memory_athlete.memoryassistant.Helper.APP_FOLDER; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; - @RunWith(AndroidJUnit4ClassRunner.class) public class WithStoragePermissionInstrumentedUnitTests { @Rule diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithoutStoragePermissionInstrumentedUnitTests.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithoutStoragePermissionInstrumentedUnitTests.java index 9947161d..5e5396ff 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithoutStoragePermissionInstrumentedUnitTests.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/WithoutStoragePermissionInstrumentedUnitTests.java @@ -1,5 +1,10 @@ package com.memory_athlete.memoryassistant; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static androidx.core.content.ContextCompat.checkSelfPermission; +import static com.memory_athlete.memoryassistant.Helper.APP_FOLDER; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; + import android.content.pm.PackageManager; import android.os.Build; @@ -17,11 +22,6 @@ import java.nio.file.AccessDeniedException; import java.nio.file.Files; -import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; -import static androidx.core.content.ContextCompat.checkSelfPermission; -import static com.memory_athlete.memoryassistant.Helper.APP_FOLDER; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; - @RunWith(AndroidJUnit4ClassRunner.class) public class WithoutStoragePermissionInstrumentedUnitTests { @Rule diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/PreferenceActivityInstrumentedUnitTests.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/PreferenceActivityInstrumentedUnitTests.java index 2976e99a..eb588067 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/PreferenceActivityInstrumentedUnitTests.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/PreferenceActivityInstrumentedUnitTests.java @@ -1,6 +1,13 @@ package com.memory_athlete.memoryassistant.main; +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.anything; + import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -20,13 +27,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static androidx.test.espresso.Espresso.onData; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.anything; - @LargeTest @RunWith(AndroidJUnit4ClassRunner.class) public class PreferenceActivityInstrumentedUnitTests { diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/RecallDisciplineNameInstrumentedIntegratedTests.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/RecallDisciplineNameInstrumentedIntegratedTests.java index b58a62ed..46523e32 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/RecallDisciplineNameInstrumentedIntegratedTests.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/RecallDisciplineNameInstrumentedIntegratedTests.java @@ -1,6 +1,21 @@ package com.memory_athlete.memoryassistant.main; +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.scrollTo; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom; +import static androidx.test.espresso.matcher.ViewMatchers.withClassName; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withParent; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.anything; +import static org.hamcrest.Matchers.is; + import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -23,21 +38,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static androidx.test.espresso.Espresso.onData; -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.action.ViewActions.scrollTo; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom; -import static androidx.test.espresso.matcher.ViewMatchers.withClassName; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withParent; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.anything; -import static org.hamcrest.Matchers.is; - // Using BVA @LargeTest @RunWith(AndroidJUnit4ClassRunner.class) diff --git a/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/SearchMySpaceActivityInstrumentedUnitTest.java b/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/SearchMySpaceActivityInstrumentedUnitTest.java index acdeb099..222b5988 100644 --- a/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/SearchMySpaceActivityInstrumentedUnitTest.java +++ b/app/src/androidTest/java/com/memory_athlete/memoryassistant/main/SearchMySpaceActivityInstrumentedUnitTest.java @@ -1,6 +1,26 @@ package com.memory_athlete.memoryassistant.main; +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard; +import static androidx.test.espresso.action.ViewActions.pressImeActionButton; +import static androidx.test.espresso.action.ViewActions.replaceText; +import static androidx.test.espresso.action.ViewActions.scrollTo; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.RootMatchers.withDecorView; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withClassName; +import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.anything; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.core.IsNot.not; + import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -24,26 +44,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static androidx.test.espresso.Espresso.onData; -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard; -import static androidx.test.espresso.action.ViewActions.pressImeActionButton; -import static androidx.test.espresso.action.ViewActions.replaceText; -import static androidx.test.espresso.action.ViewActions.scrollTo; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.RootMatchers.withDecorView; -import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; -import static androidx.test.espresso.matcher.ViewMatchers.withClassName; -import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static com.memory_athlete.memoryassistant.TestHelper.waitForExecution; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.anything; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.core.IsNot.not; - @LargeTest @RunWith(AndroidJUnit4ClassRunner.class) public class SearchMySpaceActivityInstrumentedUnitTest { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 63c55fd2..e441730c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,12 +3,16 @@ xmlns:tools="http://schemas.android.com/tools" package="com.memory_athlete.memoryassistant"> + + + + + tools:targetApi="jelly_bean" + android:exported="true"> @@ -71,7 +76,8 @@ android:name=".main.Practice" android:launchMode="singleTask" android:parentActivityName=".main.MainActivity" - tools:targetApi="jelly_bean"> + tools:targetApi="jelly_bean" + android:exported="true"> @@ -144,9 +150,9 @@ android:name=".inAppBilling.DonateActivity" android:parentActivityName=".main.Contribute" tools:targetApi="jelly_bean"> - + + + - + + + diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Cards.java b/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Cards.java index a99ecdec..a9ab06a5 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Cards.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Cards.java @@ -1,9 +1,11 @@ package com.memory_athlete.memoryassistant.disciplines; +import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Environment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,6 +16,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; import androidx.preference.PreferenceManager; import com.memory_athlete.memoryassistant.Helper; @@ -22,7 +25,9 @@ import com.squareup.picasso.Picasso; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -168,36 +173,108 @@ protected boolean save() { if (randomList.isEmpty()) return false; StringBuilder stringBuilder = new StringBuilder(); - //Practice Directory - String path = Helper.APP_FOLDER + File.separator - + getString(R.string.practice); - - if (Helper.makeDirectory(path, activity)) { - //Discipline Directory - path += File.separator + activity.getTitle(); - if (Helper.makeDirectory(path, activity)) { - //File Path - path += File.separator + ((new SimpleDateFormat( - "yy-MM-dd_HH:mm", Locale.getDefault())).format(new Date())) + ".txt"; - try { - FileOutputStream outputStream = new FileOutputStream(new File(path)); - - for (Integer i : randomList)// 0; i < randomList.size(); i++) - stringBuilder.append(i).append("\n"); - //\n is also a delimiter used in recall - - outputStream.write(stringBuilder.toString().getBytes()); - outputStream.close(); - Toast.makeText(activity, "Saved", Toast.LENGTH_SHORT).show(); - return true; - } catch (Exception e) { - e.printStackTrace(); - Toast.makeText(activity, "Try again", Toast.LENGTH_SHORT).show(); +// //Practice Directory +// String path = Helper.APP_FOLDER + File.separator +// + getString(R.string.practice); +// +// if (Helper.makeDirectory(path, activity)) { +// //Discipline Directory +// path += File.separator + activity.getTitle().toString(); +// if (Helper.makeDirectory(path, activity)) { +// //File Path +// path += File.separator + ((new SimpleDateFormat( +// "yy-MM-dd_HH:mm", Locale.getDefault())).format(new Date())) + ".txt"; +// try { +// FileOutputStream outputStream = new FileOutputStream(new File(path)); +// +// for (Integer i : randomList)// 0; i < randomList.size(); i++) +// stringBuilder.append(i).append("\n"); +// //\n is also a delimiter used in recall +// +// outputStream.write(stringBuilder.toString().getBytes()); +// outputStream.close(); +// Toast.makeText(activity, "Saved", Toast.LENGTH_SHORT).show(); +// return true; +// } catch (Exception e) { +// e.printStackTrace(); +// Toast.makeText(activity, "Try again", Toast.LENGTH_SHORT).show(); +// } +// } +// } else Toast.makeText(getActivity(), R.string.storage_permission_for_recall, +// Toast.LENGTH_LONG).show(); +// return false; +// + + //discipline code + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + + File folder = getActivity().getFilesDir(); + String path = folder + File.separator + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + + //Directory of practice - internal storage +// String path = Helper.APP_FOLDER + File.separator +// + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + + Toast.makeText(activity.getApplicationContext(),path, Toast.LENGTH_SHORT).show(); + + if (Helper.makeDirectory(path, getContext())) { + path += File.separator + ((new SimpleDateFormat("yy-MM-dd_HH:mm", + Locale.getDefault())).format(new Date())) + ".txt"; + + //Write the file + try { + + FileOutputStream outputStream = new FileOutputStream(new File(path)); + for (Integer i : randomList)// 0; i < randomList.size(); i++) + stringBuilder.append(i).append("\n"); + //\n is also a delimiter used in recall + + outputStream.write(stringBuilder.toString().getBytes()); + outputStream.close(); + Toast.makeText(activity, "Saved", Toast.LENGTH_SHORT).show(); + return true; + + } catch (FileNotFoundException e) { + Timber.e(e); + if (saveErrorCount == 0) { + Toast.makeText(activity.getApplicationContext(), R.string.fnf_try_again, Toast.LENGTH_SHORT).show(); + saveErrorCount++; + String[] blocked = {"|", "\\", "?", "*", "<", "\"", ":", ">", "+", "[", "]", "'"}; + for (CharSequence c : blocked) { + String s = path; + s = s.replace(c, ""); + if (!s.equals(path)) { + Timber.e("illegal character in path : %s", path); + path = s; + } + } + return false; } + File f = new File(path); + if (!f.exists()) throw new RuntimeException( + activity.getTitle().toString() + " directory doesn't exist", e); + throw new RuntimeException(e); + } catch (IOException e) { + Timber.e(e); + if (saveErrorCount == 0) { + Toast.makeText(activity.getApplicationContext(), R.string.io_try_again, Toast.LENGTH_SHORT).show(); + saveErrorCount++; + return false; + } + File f = new File(path); + if (!f.exists() && !f.isDirectory()) + throw new RuntimeException(path + " doesn't exist", e); + throw new RuntimeException(e); } } else Toast.makeText(getActivity(), R.string.storage_permission_for_recall, Toast.LENGTH_LONG).show(); return false; + + + } @Override diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/DisciplineFragment.java b/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/DisciplineFragment.java index 826064bd..2b7a8cb9 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/DisciplineFragment.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/DisciplineFragment.java @@ -1,14 +1,23 @@ package com.memory_athlete.memoryassistant.disciplines; +import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; +import android.app.Instrumentation; +import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.os.CountDownTimer; +import android.os.Environment; import android.os.SystemClock; +import android.provider.MediaStore; import android.speech.tts.TextToSpeech; import android.view.LayoutInflater; import android.view.View; @@ -29,6 +38,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.preference.PreferenceManager; @@ -44,7 +55,9 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Objects; import timber.log.Timber; @@ -89,7 +102,7 @@ public abstract class DisciplineFragment extends Fragment implements View.OnClic private TextToSpeech textToSpeech; protected SharedPreferences sharedPreferences; - private int saveErrorCount = 0; + int saveErrorCount = 0; //protected boolean hasAsync; public DisciplineFragment() { @@ -395,9 +408,20 @@ protected boolean save() { if (stringToSave == null || stringToSave.equals("")) return false; - //Directory of practice - String path = Helper.APP_FOLDER + File.separator - + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + + File folder = getActivity().getFilesDir(); + String path = folder + File.separator + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + + //Directory of practice - internal storage +// String path = Helper.APP_FOLDER + File.separator +// + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + + Toast.makeText(activity.getApplicationContext(),"discipline is working", Toast.LENGTH_SHORT).show(); + if (Helper.makeDirectory(path, getContext())) { path += File.separator + ((new SimpleDateFormat("yy-MM-dd_HH:mm", Locale.getDefault())).format(new Date())) + ".txt"; diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Numbers.java b/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Numbers.java index 458d4c5a..0084c8e1 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Numbers.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/disciplines/Numbers.java @@ -1,5 +1,6 @@ package com.memory_athlete.memoryassistant.disciplines; +import android.Manifest; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -14,6 +15,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; import androidx.preference.PreferenceManager; import com.memory_athlete.memoryassistant.Helper; @@ -22,7 +24,9 @@ import com.memory_athlete.memoryassistant.recall.RecallSimple; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; @@ -188,32 +192,99 @@ protected boolean save() { if (stringToSave == null || stringToSave.equals("")) return false; //Practice Directory - String path = Helper.APP_FOLDER + File.separator - + getString(R.string.practice); +// String path = Helper.APP_FOLDER + File.separator +// + getString(R.string.practice); +// +// if (Helper.makeDirectory(path, getContext())) { +// //Discipline Directory +// path += File.separator + activity.getTitle().toString(); +// if (Helper.makeDirectory(path, getContext())) { +// //FilePath +// path += File.separator +// + ((new SimpleDateFormat("yy-MM-dd_HH:mm", Locale.getDefault())) +// .format(new Date())) + ".txt"; +// try { +// FileOutputStream outputStream = new FileOutputStream(new File(path)); +// outputStream.write(stringToSave.getBytes()); +// +// outputStream.close(); +// Toast.makeText(getActivity(), R.string.saved, Toast.LENGTH_SHORT).show(); +// return true; +// } catch (Exception e) { +// Timber.e(e); +// Toast.makeText(getActivity(), R.string.try_again, Toast.LENGTH_SHORT).show(); +// } +// } +// } else Toast.makeText(getActivity(), R.string.storage_permission_for_recall, +// Toast.LENGTH_LONG).show(); +// return false; + + + //From discipline + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + + File folder = getActivity().getFilesDir(); + String path = folder + File.separator + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + + //Directory of practice - internal storage +// String path = Helper.APP_FOLDER + File.separator +// + getString(R.string.practice) + File.separator + activity.getTitle().toString(); + + Toast.makeText(activity.getApplicationContext(),"discipline is working", Toast.LENGTH_SHORT).show(); if (Helper.makeDirectory(path, getContext())) { - //Discipline Directory - path += File.separator + "Digits"; - if (Helper.makeDirectory(path, getContext())) { - //FilePath - path += File.separator - + ((new SimpleDateFormat("yy-MM-dd_HH:mm", Locale.getDefault())) - .format(new Date())) + ".txt"; - try { - FileOutputStream outputStream = new FileOutputStream(new File(path)); - outputStream.write(stringToSave.getBytes()); - - outputStream.close(); - Toast.makeText(getActivity(), R.string.saved, Toast.LENGTH_SHORT).show(); - return true; - } catch (Exception e) { - Timber.e(e); - Toast.makeText(getActivity(), R.string.try_again, Toast.LENGTH_SHORT).show(); + path += File.separator + ((new SimpleDateFormat("yy-MM-dd_HH:mm", + Locale.getDefault())).format(new Date())) + ".txt"; + + //Write the file + try { + FileOutputStream outputStream = new FileOutputStream(new File(path)); + outputStream.write(stringToSave.getBytes()); + + outputStream.close(); + Toast.makeText(activity.getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show(); + return true; + } catch (FileNotFoundException e) { + Timber.e(e); + if (saveErrorCount == 0) { + Toast.makeText(activity.getApplicationContext(), R.string.fnf_try_again, Toast.LENGTH_SHORT).show(); + saveErrorCount++; + String[] blocked = {"|", "\\", "?", "*", "<", "\"", ":", ">", "+", "[", "]", "'"}; + for (CharSequence c : blocked) { + String s = path; + s = s.replace(c, ""); + if (!s.equals(path)) { + Timber.e("illegal character in path : %s", path); + path = s; + } + } + return false; } + File f = new File(path); + if (!f.exists()) throw new RuntimeException( + activity.getTitle().toString() + " directory doesn't exist", e); + throw new RuntimeException(e); + } catch (IOException e) { + Timber.e(e); + if (saveErrorCount == 0) { + Toast.makeText(activity.getApplicationContext(), R.string.io_try_again, Toast.LENGTH_SHORT).show(); + saveErrorCount++; + return false; + } + File f = new File(path); + if (!f.exists() && !f.isDirectory()) + throw new RuntimeException(path + " doesn't exist", e); + throw new RuntimeException(e); } } else Toast.makeText(getActivity(), R.string.storage_permission_for_recall, Toast.LENGTH_LONG).show(); return false; + + + } //Case with more digits than 1 or Custom return super.save(); diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/Contribute.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/Contribute.java index 2b50b937..c3a849c2 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/Contribute.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/Contribute.java @@ -26,7 +26,6 @@ import timber.log.Timber; - public class Contribute extends AppCompatActivity { private FirebaseAnalytics mFirebaseAnalytics; @@ -40,6 +39,8 @@ public void onCreate(Bundle savedInstanceState) { setAdapter(); } + + // setting the adapter for displaying the list support, fund,.. public void setAdapter() { final List list = setList(); @@ -94,6 +95,7 @@ public void setAdapter() { Timber.v("Adapter set!"); } + // defining the list items private List setList() { String[] headers = getResources().getStringArray(R.array.contribute_headers); String[] bodies = getResources().getStringArray(R.array.contribute_bodies); @@ -116,6 +118,7 @@ private class Item { } } + // defining each item of adapter private class MainAdapter extends ArrayAdapter { MainAdapter(Activity context, List words) { diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/CrashlyticsLogTree.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/CrashlyticsLogTree.java index f7cff341..866dd252 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/CrashlyticsLogTree.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/CrashlyticsLogTree.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; -import com.crashlytics.android.Crashlytics; +//import com.crashlytics.android.Crashlytics; import timber.log.Timber; @@ -18,18 +18,18 @@ protected void log(int priority, String tag, @NonNull String message, Throwable if (priority == Log.VERBOSE || priority == Log.DEBUG) { return; } else if (priority == Log.INFO) { - Crashlytics.log(priority, tag, message); + //Crashlytics.log(priority, tag, message); return; } - Crashlytics.setInt(CRASHLYTICS_KEY_PRIORITY, priority); - Crashlytics.setString(CRASHLYTICS_KEY_TAG, tag); - Crashlytics.setString(CRASHLYTICS_KEY_MESSAGE, message); +// Crashlytics.setInt(CRASHLYTICS_KEY_PRIORITY, priority); +// Crashlytics.setString(CRASHLYTICS_KEY_TAG, tag); +// Crashlytics.setString(CRASHLYTICS_KEY_MESSAGE, message); if (throwable != null) { - Crashlytics.logException(throwable); + //Crashlytics.logException(throwable); } else { - Crashlytics.logException(new Exception(message)); + //Crashlytics.logException(new Exception(message)); } } } diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/CreditsActivity.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/CreditsActivity.java index a8644ca9..14ddfb9b 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/CreditsActivity.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/CreditsActivity.java @@ -39,6 +39,7 @@ protected void onCreate(Bundle savedInstanceState) { }); } + // getting the names to be displayed ArrayList setList(){ ArrayList contributors = new ArrayList<>(); String[] names = getResources().getStringArray(R.array.contributor_names); @@ -56,6 +57,7 @@ private class Item { } } + // defining each item of adapter private class CreditAdapter extends ArrayAdapter { CreditAdapter(Context context, ArrayList list) { diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/DisciplineActivity.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/DisciplineActivity.java index dc0ce81e..bda7e094 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/DisciplineActivity.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/DisciplineActivity.java @@ -40,7 +40,6 @@ public class DisciplineActivity extends AppCompatActivity implements MySpaceFragment.TabTitleUpdater { boolean backPressed = false; - private static ArrayList tabTitles; static Intent intent; //Contains data sent to this activity static ViewPager viewPager; @@ -112,6 +111,7 @@ private SimpleFragmentPagerAdapter(FragmentManager fm) { super(fm); } + // it takes the content according to the discipline like numbers, words, names,.. @NonNull @Override public Fragment getItem(int position) { @@ -180,7 +180,7 @@ protected void onPause() { @Override public void onBackPressed() { int cur = viewPager.getCurrentItem(); - String tag = "android:switcher:" + R.id.viewpager + ":" + cur; + String tag = "android:switcher:" + R.id.viewpager + ":" + cur; //go back in current fragment if (cur != 0) { @@ -270,7 +270,7 @@ protected SimpleFragmentPagerAdapter doInBackground(Void... v) { if (noOfMySpaceScreens == 1) tabTitles.add(mySpace); else tabTitles.add(mySpace + " " + (i + 1)); } - Timber.v("tabTitles.size() = %s", tabTitles.size()); + Timber.v("tabTitles.size() = %s", tabTitles.size()); } return new SimpleFragmentPagerAdapter(fragManager); } diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/Learn.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/Learn.java index 1320ff28..72ec4f30 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/Learn.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/Learn.java @@ -22,7 +22,6 @@ import java.util.ArrayList; - public class Learn extends AppCompatActivity { @Override @@ -34,8 +33,10 @@ public void onCreate(Bundle savedInstanceState) { setAdapter(); } + // setting the adapter public void setAdapter() { final ArrayList list = new ArrayList<>(); + setList(list); LearnAdapter adapter = new LearnAdapter(this, list); @@ -53,6 +54,7 @@ public void setAdapter() { }); } + // sets the list method of loci, the perfect association,... private void setList(ArrayList list) { list.add(new Item(R.string.method_of_loci, R.drawable.method_of_loci, Lessons.class, R.raw.lesson_method_of_loci)); list.add(new Item(R.string.associations, R.drawable.perfect_association, Lessons.class, R.raw.lesson_perfect_association)); @@ -65,6 +67,7 @@ private void setList(ArrayList list) { //list.add(new Item(R.string.checkout, Lessons.class, R.raw.Important, true)); } + // data about each item private class Item { int mItem, mFile, mImageId; Class mClass; @@ -85,6 +88,7 @@ private class Item { }*/ } + // defining the adapter which is going to take the list of items for displaying private class LearnAdapter extends ArrayAdapter { LearnAdapter(Activity context, ArrayList list) { diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/MainActivity.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/MainActivity.java index 33094768..8da86b7d 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/MainActivity.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/MainActivity.java @@ -21,10 +21,10 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.preference.PreferenceManager; -import com.crashlytics.android.Crashlytics; +//import com.crashlytics.android.Crashlytics; import com.google.android.material.snackbar.Snackbar; +import com.google.firebase.BuildConfig; import com.google.firebase.analytics.FirebaseAnalytics; -import com.memory_athlete.memoryassistant.BuildConfig; import com.memory_athlete.memoryassistant.Helper; import com.memory_athlete.memoryassistant.R; import com.memory_athlete.memoryassistant.mySpace.MySpace; @@ -37,23 +37,25 @@ import java.util.Locale; import java.util.Objects; -import io.fabric.sdk.android.Fabric; +//import io.fabric.sdk.android.Fabric; import timber.log.Timber; import static android.widget.Toast.makeText; import static com.memory_athlete.memoryassistant.Helper.REQUEST_STORAGE_ACCESS; - public class MainActivity extends AppCompatActivity { boolean backPressed = false; + // sharedPreferences object points to a file containing key-value pairs private SharedPreferences sharedPreferences; + // create a menu bar on the first page @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } + // when clicked on Privacy Policy, go to the PrivacyPolicy activity which is a menu item of menu bar @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == R.id.privacy_policy_menu) { @@ -64,6 +66,7 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { return true; } + // close the MainActivity on back press @Override public void onBackPressed() { if (sharedPreferences.getBoolean(getString(R.string.double_back_to_exit), false) @@ -73,25 +76,27 @@ public void onBackPressed() { } else super.onBackPressed(); } + // displays the main content on the first page @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (BuildConfig.DEBUG) { Timber.plant(new Timber.DebugTree()); } else { - Fabric.with(this, new Crashlytics()); + //Fabric.with(this, new Crashlytics()); Timber.plant(new CrashlyticsLogTree()); } if (BuildConfig.DEBUG) Timber.plant(new Timber.DebugTree()); Helper.theme(this, MainActivity.this); setContentView(R.layout.activity_main); - setTitle(getString(R.string.app_name)); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + setAdapter(); firstStart(); + Helper.mayAccessStorage(this); if (!verifyInstallerId() && !BuildConfig.DEBUG) { Toast.makeText(this, R.string.dl_from_play, Toast.LENGTH_LONG).show(); @@ -100,9 +105,9 @@ protected void onCreate(Bundle savedInstanceState) { } if (!Locale.getDefault().getLanguage().equals("en")) Toast.makeText(this, R.string.faulty_translations, Toast.LENGTH_LONG).show(); - } + // resuming the MainActivity again @Override protected void onResume() { super.onResume(); @@ -115,12 +120,14 @@ protected void onResume() { }).start(); } + // checks if the MainActivity is running void firstStart() { if (sharedPreferences.getLong("last_opened", 0) != 0) return; makeText(getApplicationContext(), R.string.confused, Toast.LENGTH_LONG).show(); Timber.d("firstStart"); } + // verifies the installer id for checking if app is installed from play store boolean verifyInstallerId() { // A list with valid installers package name List validInstallers = new ArrayList<>(Arrays.asList("com.android.vending", "com.google.android.feedback")); @@ -130,9 +137,11 @@ boolean verifyInstallerId() { return installer != null && validInstallers.contains(installer); } + // ask user's permission for phone read and write storage @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_STORAGE_ACCESS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults.length > 1 && grantResults[1] == PackageManager.PERMISSION_GRANTED) { @@ -144,9 +153,9 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } } + // displays the list learn, practice, recall,... on the first page, when clicked on a list item, go to that Activity public void setAdapter() { final List list = setList(); - MainAdapter adapter = new MainAdapter(this, list); ListView listView = findViewById(R.id.main_list); listView.setAdapter(adapter); @@ -161,6 +170,7 @@ public void setAdapter() { Timber.v("Adapter set!"); } + // sets the list learn, practice, recall,... private List setList() { return Arrays.asList( new Item(R.string.learn, R.drawable.learn, Learn.class), @@ -170,10 +180,11 @@ private List setList() { new Item(R.string.my_space, R.drawable.my_space, MySpace.class), new Item(R.string.preferences, R.drawable.preferences, Preferences.class), new Item(R.string.get_pro, R.drawable.get_pro, Contribute.class)); - //list.add(new Item(R.string.reminders, )) + //list.add(new Item(R.string.reminders,)) //Timber.v("List set!"); } + // data about each item private class Item { int mItem, mImageId; Class mClass; @@ -185,6 +196,7 @@ private class Item { } } + // defining the adapter which is going to take the list of items for displaying private class MainAdapter extends ArrayAdapter { MainAdapter(Activity context, List words) { diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/Practice.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/Practice.java index 102bc5f4..8ce4c6c4 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/Practice.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/Practice.java @@ -67,6 +67,7 @@ public void onCreate(Bundle savedInstanceState) { } } + // sets the list numbers,words,... private void setList(ArrayList disc) { disc.add(new Discipline(R.string.numbers, R.drawable.numbers, 1, true, false, 1)); disc.add(new Discipline(R.string.words, R.drawable.vocabulary, 2, false, true)); @@ -81,6 +82,7 @@ private void setList(ArrayList disc) { //disc.add(new Discipline(R.string.j, R.drawable.colours, Colours.class, false, false)); } + // data about each item private class Discipline { private int mNameId; private int mImageId; @@ -107,6 +109,7 @@ private class Discipline { } } + // defining the adapter which is going to take the list of items for displaying private class DisciplineAdapter extends ArrayAdapter { DisciplineAdapter(Context context, ArrayList cats) { super(context, 0, cats); diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/main/RecallSelector.java b/app/src/main/java/com/memory_athlete/memoryassistant/main/RecallSelector.java index 1b884bff..9770120c 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/main/RecallSelector.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/main/RecallSelector.java @@ -1,5 +1,6 @@ package com.memory_athlete.memoryassistant.main; +import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; @@ -20,6 +21,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; import com.google.android.material.snackbar.Snackbar; import com.memory_athlete.memoryassistant.Helper; @@ -165,16 +167,34 @@ private void onMyItemClick(ArrayList finalArrayList, int position, Relativ targetClass = item.mClass; mDiscipline = item.mFileName; - dir = new File(Helper.APP_FOLDER + File.separator + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + + File folder = getFilesDir(); + dir = new File(folder + File.separator + getString(R.string.practice) + File.separator + mDiscipline); + +// dir = new File(Helper.APP_FOLDER + File.separator +// + getString(R.string.practice) + File.separator + mDiscipline); Timber.v("directory path = %s", dir.getAbsolutePath()); File[] files = dir.listFiles(); if (files == null || files.length == 0) { String s = (mDiscipline.equals(getString(R.string.digits))) ? getString(R.string.numbers) : mDiscipline; - practice(Helper.APP_FOLDER + File.separator + + //Directory of practice - external storage + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + + File folder1 = getFilesDir(); + practice(folder1 + File.separator + getString(R.string.practice) + File.separator + s); + +// practice(Helper.APP_FOLDER + File.separator +// + getString(R.string.practice) + File.separator + s); return; } @@ -187,8 +207,19 @@ private void onMyItemClick(ArrayList finalArrayList, int position, Relativ } else { // selected stored file within the discipline Timber.v("listViewId = %s", listViewId); - String filePath = Helper.APP_FOLDER + File.separator + + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + + File folder = getFilesDir(); + String filePath = folder + File.separator + getString(R.string.practice) + File.separator + mDiscipline + File.separator + item.mFileName; + + +// String filePath = Helper.APP_FOLDER + File.separator +// + getString(R.string.practice) + File.separator + mDiscipline + File.separator + item.mFileName; Intent intent = new Intent(getApplicationContext(), targetClass); // file's readable name (without extension) intent.putExtra("name", item.mName); // filepath intent.putExtra("file", filePath); // discipline diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpace.java b/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpace.java index 69fdc11e..4c2ca265 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpace.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpace.java @@ -1,5 +1,6 @@ package com.memory_athlete.memoryassistant.mySpace; +import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; @@ -20,6 +21,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; import com.google.android.material.snackbar.Snackbar; import com.memory_athlete.memoryassistant.Helper; @@ -100,6 +102,7 @@ public void setAdapter() { Timber.v("setAdapter started"); ArrayList arrayList = new ArrayList<>(); if (listViewId == MIN_DYNAMIC_VIEW_ID) arrayList = setList(); + else { File[] files = dir.listFiles(); if (files == null || files.length == 0) return; @@ -135,7 +138,15 @@ public void setAdapter() { Item item = finalArrayList.get(position); Timber.v("item.mPath = %s", item.mItem); if (listViewId == MIN_DYNAMIC_VIEW_ID) { - dir = new File(Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + item.mItem); + + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + File folder = getFilesDir(); + dir = new File(folder + File.separator + getString(R.string.my_space) + File.separator + item.mItem); + + //dir = new File(Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + item.mItem); layout.findViewById(listViewId).setVisibility(View.GONE); listViewId++; setTitle(item.mName); @@ -146,7 +157,15 @@ public void setAdapter() { } Timber.v("listViewId = %s", listViewId); - String fileName = Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + getTitle(); + + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + File folder = getFilesDir(); + String fileName = folder + File.separator + "My Space" + File.separator + getTitle().toString(); + + //String fileName = Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + getTitle(); Intent intent = new Intent(getApplicationContext(), WriteFile.class); intent.putExtra("mHeader", item.mName); @@ -168,7 +187,15 @@ public void add(View view) { Intent intent = new Intent(getApplicationContext(), WriteFile.class); intent.putExtra("mHeader", getTitle()); intent.putExtra("name", false); - intent.putExtra("fileName", Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + getTitle()); + + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + File folder = getFilesDir(); + intent.putExtra("fileName", folder + File.separator + getString(R.string.my_space) + File.separator + getTitle()); + + //intent.putExtra("fileName", Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + getTitle()); startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } @@ -202,6 +229,7 @@ private class Item { } } + // define each list item of mySpace private class MySpaceAdapter extends ArrayAdapter { MySpaceAdapter(Activity context, ArrayList list) { diff --git a/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpaceFragment.java b/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpaceFragment.java index 5a5c3023..98e4ada5 100644 --- a/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpaceFragment.java +++ b/app/src/main/java/com/memory_athlete/memoryassistant/mySpace/MySpaceFragment.java @@ -1,5 +1,6 @@ package com.memory_athlete.memoryassistant.mySpace; +import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; @@ -23,6 +24,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.preference.PreferenceManager; @@ -202,7 +204,15 @@ public void setAdapter(final View rootView) { Item item = finalArrayList.get(position); Timber.v("item.mPath = %s", item.mPath); if (fragListViewId == MIN_DYNAMIC_VIEW_ID) { // show selector - dir = new File(Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + item.mPath); + + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + File folder = getActivity().getFilesDir(); + dir = new File(folder + File.separator + getString(R.string.my_space) + File.separator + item.mPath); + + //dir = new File(Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + item.mPath); layout.findViewById(fragListViewId).setVisibility(View.GONE); fragListViewId++; title = item.mName; @@ -219,7 +229,15 @@ public void setAdapter(final View rootView) { //rootView.findViewById(R.id.back_button).bringToFront(); } else { // show editor Timber.v("listViewId = %s", fragListViewId); - fileName = Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + title; + + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + File folder = getActivity().getFilesDir(); + fileName = folder + File.separator + getString(R.string.my_space) + File.separator + title; + + //fileName = Helper.APP_FOLDER + getString(R.string.my_space) + File.separator + title; //Intent intent = new Intent(getApplicationContext(), WriteFile.class); //intent.putExtra("mHeader", item.mName); //intent.putExtra("fileString", item.mItem); @@ -297,8 +315,15 @@ private void setButtons(final View rootView) { addClickListener = v -> { Timber.v("add button clicked"); name = false; - fileName = Helper.APP_FOLDER + MySpaceFragment.this.getString(R.string.my_space) + File.separator + title; + //Directory of practice - external storage + int EXTERNAL_STORAGE_PERMISSION_CODE = 23; + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + EXTERNAL_STORAGE_PERMISSION_CODE); + File folder = getActivity().getFilesDir(); + fileName = folder + File.separator + MySpaceFragment.this.getString(R.string.my_space) + File.separator + title;; + + //fileName = Helper.APP_FOLDER + MySpaceFragment.this.getString(R.string.my_space) + File.separator + title; editLayout.setVisibility(VISIBLE); fab.setContentDescription(getString(R.string.search)); fab.setOnClickListener(searchClickListener); diff --git a/app/src/main/res/raw-b+fil/lesson_equations.txt b/app/src/main/res/raw-b+fil/lesson_equations.txt deleted file mode 100644 index 0ba4bf2a..00000000 --- a/app/src/main/res/raw-b+fil/lesson_equations.txt +++ /dev/null @@ -1,18 +0,0 @@ -

Ang pagsasanay ng pag-memorize ng mga equation ay isang hindi mapapatawad na kasalanan sapagkat ang mga ito ay nilalayong maunawaan. Gayunpaman, pagdating sa isport, ang mga kasalanan na ito ay pinatawad. Sa kasamaang palad, ang pagsaulo ng mga equation gamit ang mga diskarte sa memorya ay namamalagi sa teritoryong hindi ginusto. Sinubukan kong lumikha ng isang sistema ng pagsaulo ng mga equation ngunit ito ay napaka-krudo at hindi epektibo kaya kakailanganin mong i-tweak ito. Kung pinamamahalaan mo upang mapagbuti ito, mangyaring ibahagi ito sa akin.

- -

Narito kung paano ko kabisado ang mga bagay.

-

    -
  • Maaari kang magpahiwatig ng mga numero na may mga bagay. Ginagawa ko lang ito para sa maliliit na numero upang ang mga bagay ay manatiling madali. Para sa mas malaking bilang, maaari kang lumikha ng isang pare-pareho at kabisaduhin ito nang lubusan sa ibang landas.
  • -
  • Maaari ka ring lumikha ng isang landas na puno ng mga pormula na alam mo na at ginagamit mo ang mga pegs dito
  • -
  • Para sa isang pare-pareho tulad ng bilis ng ilaw (c) o ang unibersal na pagkakapareho ng gravitation (G) maaari kang gumamit ng mga hayop. Kaya ang isang giraffe para sa G at isang kamelyo para sa c.
  • -
  • Gumamit ng isang aksyon para sa isang operator. Halimbawa - suntok para sa pagpaparami. Maaari mong kabisaduhin ang mga panaklong at mga subscription bilang mga pagkilos din.
  • -
  • Para sa isang variable, ang isang tao ay tila ang pinakamahusay na pagpipilian. Si Alan mula sa The Hangover ay isang mahusay na pagpipilian para sa A. Huwag paghaluin ang kapital at maliliit na letra, italaga ang magkakaibang mga tao.
  • -
  • Para sa isang equation ng kemikal, ang mga tao ay maaaring magpahiwatig ng bagong molekula. Huwag gumamit ng anumang bagay para sa mga elemento, dapat mong malaman ang lahat o maaari mo lamang gamitin ang mga pegs mula sa ibang landas / aparador.
  • -
-

Upang kabisaduhin ang lahat ng mga simbolo na iyon, lumikha ng isang kuwento. Maaari kang mag-imbak ng isang maikling equation, sa isang solong peg ngunit kung magtatagal, marahil kakailanganin mong ipagpatuloy ito sa susunod na peg. Sa huli, tiyaking markahan ito bilang pagpapatuloy. Ang isa pang aksyon ay maaaring magamit para sa gawaing ito.

- -

Ilang tip

- -
    -
  • Subukang mapanatili ang pagkakasunud-sunod ng lahat ng mga termino at variable. Mayroon itong mga kalamangan at kahinaan. Ang pangunahing con ay ginagawang katulad ng mga kwento at paulit-ulit at pinatataas ang pagkakataong kalimutan ang equation. Ang resulta na ito ay nagreresulta sa isang pro - hinihikayat ang pag-unawa sa mga equation para sa mga nag-rote ng pag-aaral.
  • -
\ No newline at end of file diff --git a/app/src/main/res/raw-b+fil/lesson_language.txt b/app/src/main/res/raw-b+fil/lesson_language.txt deleted file mode 100644 index ff9e26a7..00000000 --- a/app/src/main/res/raw-b+fil/lesson_language.txt +++ /dev/null @@ -1,9 +0,0 @@ -

Ang pinakamahirap na bahagi ng pag-aaral ng isang bagong wika ay ang bokabularyo. Gayunpaman, isang lakad lamang ito sa parke para sa isang atleta ng memorya. Kumuha lamang ng isang landas ng elepante o isang aparador. Kabisaduhin ang isang salita sa bawat peg. Kabisaduhin ang kahulugan sa pareho o sa susunod na peg depende sa iyong kagustuhan.

- -

Upang kabisaduhin ang isang bagong salita, gumawa lamang ng isang kwento upang kabisaduhin ang pagkakasunud-sunod ng mga pantig. Gumamit ng isa pang kwento na tumutugma sa kahulugan.

- -

Upang malaman ang isang bagong script, lumikha ng isang kwento na maaaring kumatawan ng isang character at kabisaduhin ang pagbigkas. Iyon lang.

- -

Kapag natapos na, maaari mong kabisaduhin ang mga tuntunin sa gramatika at mga pagbubukod bilang mga listahan.

- -

Ang kahusayan ay maaari lamang makuha sa pamamagitan ng paggamit ng wika nang madalas nang hindi ginagamit ang iyong elepante na landas.

\ No newline at end of file diff --git a/app/src/main/res/raw-b+fil/lesson_major_system.txt b/app/src/main/res/raw-b+fil/lesson_major_system.txt deleted file mode 100644 index 29a9d058..00000000 --- a/app/src/main/res/raw-b+fil/lesson_major_system.txt +++ /dev/null @@ -1,77 +0,0 @@ -

Pinagmulan: http://memory-sports.com

- -

Ito ay isang makapangyarihang tool na ginagamit ng mayorya ng mga atleta sa kaisipan. Dahil ito ay batay sa isang phonetic system, madali mong maisaulo ang lahat ng mga imahe at magpatuloy upang magamit ito sa aksyon.

- -

Ang hamon ng mga numero

- -

Ang dahilan kung bakit napakahirap ng mga numero para sa maraming tao ay ang mga ito ay abstract. Nailalarawan nila ang isang halaga ng isang bagay, ngunit wala tayong nakikita, hawakan o maramdaman. Hindi natin mailalarawan kung ano ang ibig sabihin nito. Sigurado, maaari mong subukan ito para sa isang napakababang numero. Ngunit pagdating sa higit sa sampu magkakaroon ka ng malaking problema. Ang konklusyon para sa mga atleta ng memorya ay, upang gawing mas konkreto ang mga numero.

- -

Ang magkakaibang mga sistema ng peg

- -

Upang magpakita ng isang numero kailangan mong baguhin ito sa ibang bagay. Hindi talaga ito mahalaga sa kung ano, hangga't maaari mong isipin ito. Dahil mayroon kaming isang perpektong sistema, kailangan nating isalin ang hindi bababa sa sampung mga imahe para sa bawat bilang. Ang mga listahan na nilikha mo sa mga bagay na iyon ay malawak na tinatawag na "mga listahan ng peg". Tinutukoy ko ang mga bagay na ito bilang "mga imahe" o "mnemonics". Kapag naisaulo mo ang naturang listahan, paulit-ulit mong magamit ito at kabisaduhin ang anumang halaga ng mga numero (depende sa dami ng iyong mga lokasyon mula sa iyong Pamamaraan ng Loci).

- -

Titingnan namin ngayon ang ilang magkakaibang mga sistema ng numero na ginagamit ng mga atleta ng memorya. Ang lumalagong pagiging kumplikado ay ipinahiwatig ng salitang "Antas". Ang isang mas mataas na antas ay naglalaman ng mas maraming impormasyon sa loob ng isang imahe at samakatuwid ay mas mahusay para sa gawain ng pagsaulo. Kasabay nito ang pagsisikap ay lumalaki upang malaman ang system. Ang isang 1st-Level system ay maaaring matutunan sa loob ng limang minuto. Para sa isang sistema ng Ika-3 Antas dapat mong mas mahusay na maasahan ang ilang linggo. Ito ay nakasalalay sa iyong layunin na dapat mong gamitin. Para sa mga pag-aaral maaari kang maging maayos sa mga mas maliit na system. Kung nais mong maging isang kampeon ng memorya ay dapat kang pumunta para sa mas mataas na pagiging kumplikado.

- -

Ang pangkalahatang-ideya na ito ay halimbawa lamang ng mga pinakatanyag na system. Ang mga posibilidad ay mas malaki. Ang bawat baguhan ay pinapayuhan na tandaan na laging may isang mas mahusay na solusyon para sa pagsasalin ng mga numero sa isang bagay na mas hindi malilimutan.

- -

1st-Level: Number-Shape at Number-Rhyme System

- -

Ang isang diskarte ay sa pamamagitan ng hugis ng bawat bilang. Halimbawa: Ang "dalawa" ay mukhang isang swan lamang. Ang isa pang paraan ay ang paggamit ng mga rhymes para sa bawat bilang. Sa kasong ito ang "dalawa" ay maaaring "sapatos". Maliban kung nakikipag-usap ka lamang sa ilang maliit na numero, huwag mag-abala sa pag-aaral ng isang simpleng sistema. Ngunit bakit ganon?

- -

Noong una, hindi mo ginagamit ang kapangyarihan ng mga kumpol. Nangangahulugan ito, ang paglalagay ng maraming impormasyon sa isang imahe. Upang matandaan ang isang numero ng telepono na may walong numero, kakailanganin mo ng walong mga imahe na may tulad na isang simpleng sistema. Bagaman makakatulong pa rin ito upang matandaan ito, ang pagsisikap ay napakalaki para sa isang simpleng gawain.

- -

Pangalawa sa lahat, sampung mga imahe ay hindi sapat upang magkaroon ng isang sapat na iba't para sa iba't ibang mga kwento. Isipin na kailangan mong gumawa ng isang kuwento para sa isang numero na may apat na "twos". Kailangan mong maglagay ng apat na swans sa iyong imahe sa pag-iisip.

- -

Kung nais mong mas epektibo ang kabisaduhin ang mga numero, kakailanganin mo ng isang mas umuusbong na sistema. Kaya laktawan natin ito at magpatuloy sa 2-digit-Systems.

- -

Ika-2 -Level: Ang pangunahing System

- -

Ang pinakamaliit na kumpol para sa decimal na numero ay dalawang magkasama. Ang 10x10 ay gumagawa ng 100 mga imahe para sa bawat kumbinasyon ng dalawang numero. Maaaring magaling itong malaman, ngunit ang mnemonic na batayan ng mga sistemang ito ay makakatulong sa iyo na gawin ito sa isang napakaikling panahon. Itinuturo ng gabay na ito ang pokus sa Major System, isa sa maraming mga paraan upang magkasama ang dalawang mga numero nang magkasama. Sa huli hindi mahalaga kung anong uri ng system ang ginagamit mo kung mayroon kang parehong halaga ng impormasyon na naka-imbak bilang mga imahe.

- -

Ang Major System ay isang diskarteng phonetic upang isalin ang mga numero sa mga salita. Nagsisimula ito sa pag-convert ng mga numero sa mga tunog ng katinig. Pagkatapos nito magdagdag ka ng mga patinig bago, sa pagitan at pagkatapos ng mga titik na iyon. Ang mga patakaran ng ponetiko ay mga mnemonics at samakatuwid ay madaling matandaan. Makakatulong ito sa iyo upang mabuo muli ang mga imahe na nasa iyong ulo, kahit na hindi mo natutunan ang buong hanay ng 100 mga imahe. Matapos ang ilang pagsasanay magkakaroon ka ng malakas na samahan sa bawat numero mula 00 hanggang 99. Tila isang malaking pagsisikap na gawing mas madali ang iyong mga memorya. Ngunit hindi ito mahirap at sa huli hindi mo na kailangang isipin muli. Malalaman mo lang ang iyong mga imahe. Kung malalampasan mo ang iyong pag-aalinlangan sa kahusayan ng pagsisikap na ito, ikaw ay isang napakalaking hakbang nang una sa lahat na dumating dito ngunit tumalikod sa mga pamamaraan na ito.

- -

Ang isa pang mahusay na bagay tungkol sa Major System ay ang katotohanan, na ito ay mapapalawak. Sa pamamagitan ng pagdaragdag ng isang pangatlong numero sa iyong kumpol ay maabot mo ang ika-3 na antas. Ibig sabihin nito na kabisaduhin ang 1.000 bagay, bago mo magamit ito (o 900 kung natutunan mo na ang isang listahan ng 100). Ngunit hindi iyon ang dapat mong isipin para sa mga nagsisimula. Talagang nagagawa mong lumapit nang labis sa isang sistema ng Ika-2 Antas. Ngunit ang dami ng mga atleta ng memorya na gumagamit ng isang sistema ng Ika-3 na Antas ay lumalaki araw-araw. Hindi ako magpapansin nang detalyado tungkol sa sistema ng Ika-3 Antas sapagkat gumagana ito nang lubusan sa parehong paraan bilang isang 2nd-Level Major System ngunit may tatlong numero upang ma-encode sa halip na dalawa.

- -

Ang mga patakaran: 86 ay isang isda

- -

Ang mga sumusunod na patakaran ay ang pangunahing kaalaman ng system. Kailangan mong kabisaduhin ang mga ito upang lumikha at mabuo muli ang iyong mga imahe. Tinuro ko sila sa dose-dosenang mga bata. Nagawa nilang malaman ang mga ito sa halos sampung minuto. Kung walang paliwanag sa bibig, maaaring tumagal ng kaunti, ngunit nakukuha mo ang aking punto: Napakadaling!

- -

Ang Major Code

- -

Numeral Associated Constants

- -
    -
  • 0 s, z, malambot c
  • -
  • 1 t, d
  • -
  • 2 n
  • -
  • 3 m
  • -
  • 4 r
  • -
  • 5 l
  • -
  • 6 j, sh, malambot g, malambot na "ch"
  • -
  • 7 k, hard c, hard g, hard "ch", q, qu
  • -
  • 8 f, v
  • -
  • 9 p, b
  • -
  • Mga tunog na hindi Itinalagang-Vowel, w, h, y, x
  • -
- Ang Mnemonics - -
    -
  • Ang z ay ang unang titik ng zero. Ang iba pang mga titik ay may katulad na tunog
  • -
  • Ang t & d ay may isang pababang stroke at magkatulad na tunog (ang ilang mga variant system ay kasama ang "th")
  • -
  • Ang n ay may dalawang pababang stroke
  • -
  • huling titik ng apat, din 4 at R ay halos salamin na mga imahe ng bawat isa
  • -
  • ang isang script j ay may mas mababang loop / g ay halos isang 6 na paikutin
  • -
  • Ang kapital K "ay naglalaman ng" dalawa't pitong (ang ilang mga variant system ay kasama ang "ng")
  • -
  • Ang script f ay kahawig ng isang figure-8. Ang tunog ng V ay magkakatulad
  • -
  • Ang p ay isang salamin na imaheng 9. b katulad ng tunog at kahawig ng isang 9 na pinagsama sa paligid
  • -
  • Maaari itong magamit kahit saan nang hindi binabago ang halaga ng numero ng salita
  • -
- -

Ang bawat digit na mapa sa isang hanay ng mga magkatulad na tunog na may magkatulad na posisyon sa bibig at dila. Ang pagmamapa ay phonetic, kaya't ang mga tunog ng consonant na mahalaga, hindi ang pagbaybay. Samakatuwid ang isang salitang tulad ng "aksyon" ay makakapasok sa bilang na 762, hindi 712; at "multo" ay magiging 701, samantalang, dahil ang "gh" sa "sapat" ay binibigkas tulad ng isang "f", ang salitang "sapat" ay sumasakop sa bilang na 28.

- -

Katulad din, ang dobleng letra ay hindi pinansin. Ang salitang "misayl" ay naka-map sa 305, hindi 3005. Upang ma-encode ang 3005 ang isa ay gagamit ng isang bagay tulad ng "mossy sail".

- -

Karaniwan ang compact sa pagmamapa. "Ang Indibidwal", halimbawa, ay isinasalin nang walang talino sa 2174140, na may halagang 7 na numero na naka-encode ng 12 titik, at madaling mailarawan.

- -

Lumikha ng iyong sariling listahan

- -

Kung nananatili ka sa mga patakaran sa itaas, may ilang mga bagay na maaari kang magkamali. Maaari mo ring gamitin ang mga abstract na salita tulad ng "oras" kung mayroon kang isang malakas na samahan ng visual para dito tulad ng isang orasan. Manatiling mahigpit sa mga panuntunan sa simula. Makakatulong ito sa iyo upang maisaulo ang mga salita. Mamaya maaari kang tumalon sa paligid at gumamit ng anumang mga salita upang mapalitan ang iyong mas mahina na mga imahe. Nagbago ako ng maraming mga pegs sa aking system sa paglipas ng panahon nang hindi na ginagamit ang Major System. Ngunit upang malaman ang buong pack nang sabay-sabay, ang mga patakaran ay dapat magkaroon.

\ No newline at end of file diff --git a/app/src/main/res/raw-b+fil/lesson_method_of_loci.txt b/app/src/main/res/raw-b+fil/lesson_method_of_loci.txt deleted file mode 100644 index 5718e7cd..00000000 --- a/app/src/main/res/raw-b+fil/lesson_method_of_loci.txt +++ /dev/null @@ -1,40 +0,0 @@ -

Pinagmulan: http://memory-sports.com

- -

Ito ang unang bahagi ng iyong gabay upang makakuha ng memorya tulad ng isang elepante.

- -

Background

- -

Ang pamamaraan na ito ay kasing edad ng sinaunang demokrasya. Ginamit ito ng mga Senador ng Greek at Romano upang maisakatuparan ang memorya ng kanilang mga mahaba't talumpati kapag nagtatanghal sa harap ng senado. Ipinagbabawal na gumamit ng anumang uri ng mga tala, kaya ginagamit nila ang mahusay na pamamaraan na ito upang mapahusay ang kanilang memorya.

- -

Upang maalala ang isang talumpati, sinira nila ito ng mga piraso at lumikha ng mga simbolo para sa bawat solong bahagi. Pagkatapos ay inilagay nila ang mga simbolo na iyon sa iba't ibang mga lokal. Upang maalala ang mga ito nakita nila ang landas at pumunta mula sa isang istasyon patungo sa isa pa, kung saan naalala nila ang mga simbolo at isinalin ito pabalik sa pananalita.

- -

Bakit napakalakas ang pamamaraan ng loci? Sa isang banda ito ay gumagamit ng iyong likas na memorya para sa mga lokasyon. Kahit na wala kang magandang pakiramdam ng direksyon, maaalala mo pa rin ang iyong sariling silid sa lahat ng detalye nito. Sa kabilang banda ay nagbibigay ito ng isang lohikal na pagkakasunud-sunod. Kailangan mo lamang lakarin ang iyong silid nang sunud-sunod o hindi maikakaibilang at ang lahat ng mga bagay ay nasa isang tukoy na pagkakasunud-sunod.

- -

Tatawagin ko ang bawat ruta na nilikha namin sa pamamaraang ito ng isang "landong elepante" (o "landas" lamang). Ito ay isang track na nilikha ng mga talampakan ng hayop at kumakatawan sa pinakamadaling na-navigate na paraan sa pagitan ng isang pinagmulan at isang patutunguhan. Sa bawat oras na ginagamit ito, ito ay nagiging mas malakas at lumalaki nang mas malawak. Ang isang atleta ng memorya ay paulit-ulit na ginagamit ang kanyang mga landas. At dahil ang elepante ay isa ring simbolo para sa isang malakas na memorya, parang isang perpektong pangalan para sa pinakamadaling paraan sa isang mas mahusay na memorya.

- -

Hakbang 1 - Piliin ang iyong lokasyon

- -

Upang magamit ang diskarteng ito at maging isang atleta ng memorya, kailangan mong piliin ang iyong unang lokasyon. Maaari itong maging saanman gusto mo ngunit dapat mong piliin ang isa na pinaka-kilala mo para sa iyong unang landas ng elepante. Maaari itong maging iyong silid, iyong flat, iyong bahay o iyong lugar ng trabaho. Kung gusto mo, maaari ka ring lumikha ng isang haka-haka na landas. Ngunit mas mahirap na kabisaduhin ang simula, kaya ipinapayo ko sa iyo na pumili ng isang tunay na lokasyon sa una. Ang isang atleta ng memorya ay lumilikha ng maraming mga landas para sa mga kampeonato. Ngunit para sa mga nagsisimula ang isang landas ay dapat na maayos.

- -

Hakbang 2 - Tukuyin ang mga Way-Punto

- -

Kapag pinili mo ang iyong unang lokasyon, kailangan mong tukuyin ang lahat ng mga bagay na nais mong gamitin bilang mga point-point sa iyong elephant path. Ang mga ito ay magiging mga istasyon na kailangan mong pumasa, sa bawat oras na isinasaulo mo ang anumang uri ng impormasyon. Ang bilang ng mga paraan-point ay matukoy ang haba ng iyong ruta - at bilang isang resulta ang halaga ng impormasyon na maaari mong itago sa ito. Maaari kang magkaroon ng sampung istasyon o isang libo. Ang isang solong silid ay madaling isama ang dalawampu't mga puntos na puntos. Iminumungkahi ko na ang iyong unang landas ng elepante ay dapat magkaroon ng mga limampung istasyon. Kung manatili ka sa ilang mga patakaran, ang iyong landas ay magiging mas mahusay. Ngunit ang mga patakaran na ito ay isang gabay lamang - maaari mong sirain ang mga ito hangga't gusto mo. Yamang ang bawat tao ay may ibang kaisipan at magkakaibang mga ugnayan, marahil ay dapat mong ibaluktot ang mga patakaran upang gawing katugma ang iyong pagkatao. Sa pamamagitan ng paraan: Ito ay tumutukoy sa bawat solong aspeto sa mga diskarte sa memorya!

-