diff --git a/.gitignore b/.gitignore
index d1a486f..b325e98 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,5 @@
/captures
.externalNativeBuild
/.idea
+/keystores/release.properties
+/keystores/release_keystore.jks
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index d461b94..ff602a1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,13 @@
apply plugin: 'com.android.application'
+def propertiesFilename = "..\\keystores\\release.properties"
+if (!project.file(propertiesFilename).exists()) {
+ propertiesFilename = "..\\keystores\\test_release.properties"
+}
+
+def singingProperties = new Properties()
+singingProperties.load(new FileInputStream(file(propertiesFilename)))
+
android {
compileSdkVersion 26
defaultConfig {
@@ -10,16 +18,27 @@ android {
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ signingConfigs {
+ release {
+ keyAlias singingProperties.releaseSignKeyAlias
+ keyPassword singingProperties.releaseSignKeyPassword
+ storeFile file(singingProperties.releaseStoreFilePath)
+ storePassword singingProperties.releaseStorePassword
+
+ }
+ }
buildTypes {
release {
- minifyEnabled false
+ minifyEnabled true
+ shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.release
}
}
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
}
dependencies {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60dad6c..7b7831c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
package="com.example.anna.myapplication">
+
+
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/anna/myapplication/data/LoadDatabaseIntentService.java b/app/src/main/java/com/example/anna/myapplication/data/LoadDatabaseIntentService.java
new file mode 100644
index 0000000..eef0257
--- /dev/null
+++ b/app/src/main/java/com/example/anna/myapplication/data/LoadDatabaseIntentService.java
@@ -0,0 +1,32 @@
+package com.example.anna.myapplication.data;
+
+import java.io.FileOutputStream;
+
+import android.app.IntentService;
+import android.content.Context;
+import android.content.Intent;
+import android.widget.Toast;
+
+import com.example.anna.myapplication.presentation.MyApplication;
+
+public class LoadDatabaseIntentService extends IntentService {
+
+ public LoadDatabaseIntentService() {
+ super("LoadDatabaseIntentService");
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ if (intent != null) {
+ String databaseBackup = MyApplication.getPersonDao().loadAll().toString();
+ String fileName = intent.getStringExtra("fileName");
+ try(FileOutputStream fileOutputStream = openFileOutput(fileName, Context.MODE_PRIVATE);
+ ) {
+ fileOutputStream.write(databaseBackup.getBytes());
+ } catch (Exception e) {
+ Toast toast = Toast.makeText(this, "An error occurred while writing database", Toast.LENGTH_LONG);
+ toast.show();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/anna/myapplication/data/PersonContract.java b/app/src/main/java/com/example/anna/myapplication/data/PersonContract.java
index 6a8c5ff..83949f5 100644
--- a/app/src/main/java/com/example/anna/myapplication/data/PersonContract.java
+++ b/app/src/main/java/com/example/anna/myapplication/data/PersonContract.java
@@ -4,7 +4,6 @@
public interface PersonContract extends BaseColumns {
-
String TABLE_NAME = "personsTable";
String NAME = "name";
diff --git a/app/src/main/java/com/example/anna/myapplication/domain/Person.java b/app/src/main/java/com/example/anna/myapplication/domain/Person.java
index 1a4a3cf..3cd7c2e 100644
--- a/app/src/main/java/com/example/anna/myapplication/domain/Person.java
+++ b/app/src/main/java/com/example/anna/myapplication/domain/Person.java
@@ -71,11 +71,29 @@ public void setBirthday(String birthday) {
@Override
public String toString() {
+ String returnedString = "Person{id=";
if (id == NOT_SPECIFIED_LONG) {
- return "Person{" + "id=?, name='" + name + "\'" + '}';
+ returnedString = returnedString.concat("?");
} else {
- return "Person{" + "id=" + id + ", name='" + name + "\'" + '}';
+ returnedString = returnedString.concat("" + id);
}
+ if (!name.equals(NOT_SPECIFIED_STRING)) {
+ returnedString = returnedString.concat(", name='" + name + "\'");
+ }
+ if (!note.equals(NOT_SPECIFIED_STRING)) {
+ returnedString = returnedString.concat(", note='" + note + "\'");
+ }
+ if (imageRes != NOT_SPECIFIED_INT) {
+ returnedString = returnedString.concat(", imageRes=" + imageRes);
+ }
+ if (!imageLink.equals(NOT_SPECIFIED_STRING)) {
+ returnedString = returnedString.concat(", imageLink='" + imageLink + "\'");
+ }
+ if (!birthday.equals(NOT_SPECIFIED_STRING)) {
+ returnedString = returnedString.concat(", birthday=" + birthday);
+ }
+ returnedString = returnedString.concat("}");
+ return returnedString;
}
}
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/IntentServiceActivity.java b/app/src/main/java/com/example/anna/myapplication/presentation/IntentServiceActivity.java
new file mode 100644
index 0000000..ea49c78
--- /dev/null
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/IntentServiceActivity.java
@@ -0,0 +1,55 @@
+package com.example.anna.myapplication.presentation;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.example.anna.myapplication.R;
+
+import java.io.FileInputStream;
+
+public class IntentServiceActivity extends AppCompatActivity {
+
+ private TextView DatabaseTextView;
+ private Button DatabaseLoadButton, nextButton, backButton;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.intent_service);
+
+ DatabaseTextView = (TextView) findViewById(R.id.textView);
+
+ DatabaseLoadButton = (Button) findViewById(R.id.loadDatabaseButton);
+ DatabaseLoadButton.setOnClickListener(view -> {
+ StringBuilder stringBuilder = new StringBuilder();
+ try{
+ FileInputStream fstream = openFileInput(MyApplication.getFileName());
+ int i;
+ while ((i = fstream.read())!= -1){
+ stringBuilder.append((char)i);
+ }
+ fstream.close();
+ DatabaseTextView.setText(stringBuilder.toString());
+ }catch (Exception e){
+ DatabaseTextView.setText(getResources().getString(R.string.error_load_database));
+ }
+
+ });
+
+ nextButton = findViewById(R.id.nextScreenButton);
+ nextButton.setOnClickListener(view -> {
+ Intent startActivity = new Intent(this, TouchActivity.class);
+ startActivity(startActivity);
+ });
+
+ backButton = findViewById(R.id.to_first_activity_button);
+ backButton.setOnClickListener(view -> {
+ Intent startActivity = new Intent(this, MainActivity.class);
+ startActivity(startActivity);
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/MainActivity.java b/app/src/main/java/com/example/anna/myapplication/presentation/MainActivity.java
index f987268..be5b314 100644
--- a/app/src/main/java/com/example/anna/myapplication/presentation/MainActivity.java
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/MainActivity.java
@@ -48,7 +48,7 @@ protected void onCreate(Bundle savedInstanceState) {
buttonTraining = findViewById(R.id.training_thread);
buttonTraining.setOnClickListener(view -> {
- Intent startActivity = new Intent(MainActivity.this, RoomDB.class);
+ Intent startActivity = new Intent(MainActivity.this, TouchActivity.class);
startActivity(startActivity);
});
}
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/MyApplication.java b/app/src/main/java/com/example/anna/myapplication/presentation/MyApplication.java
index cce6dbc..3fba448 100644
--- a/app/src/main/java/com/example/anna/myapplication/presentation/MyApplication.java
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/MyApplication.java
@@ -2,18 +2,23 @@
import android.app.Application;
import android.arch.persistence.room.Room;
+import android.content.Intent;
+import com.example.anna.myapplication.data.LoadDatabaseIntentService;
import com.example.anna.myapplication.data.AppDatabase;
import com.example.anna.myapplication.data.DatabaseHolder;
import com.example.anna.myapplication.data.PersonDao;
import com.example.anna.myapplication.data.PersonRepository;
import com.facebook.drawee.backends.pipeline.Fresco;
+import java.util.Date;
+
public class MyApplication extends Application {
private static AppDatabase database;
private static PersonRepository personRepository;
private static DatabaseHolder databaseHolder;
+ private static String fileName;
public static PersonDao getPersonDao(){
return database.PersonDao();
@@ -21,6 +26,15 @@ public static PersonDao getPersonDao(){
public static PersonRepository getRepository(){
return personRepository;
}
+ public static String getFileName(){
+ return fileName;
+ }
+
+ private String getFileNameOnCurrentTime(){
+ Date currentDate = new Date();
+ long millisFromStart = currentDate.getTime();
+ return "backup-" + millisFromStart;
+ }
@Override
public void onCreate() {
@@ -36,6 +50,11 @@ public void onCreate() {
.build();
setInitialData();
+
+ // Запускаем IntentService
+ Intent intentMyIntentService = new Intent(this, LoadDatabaseIntentService.class);
+ fileName = getFileNameOnCurrentTime();
+ startService(intentMyIntentService.putExtra("fileName", fileName));
}
public static void setInitialData(){
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/PersonDetailFragment.java b/app/src/main/java/com/example/anna/myapplication/presentation/PersonDetailFragment.java
index 1f1249b..3ebce87 100644
--- a/app/src/main/java/com/example/anna/myapplication/presentation/PersonDetailFragment.java
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/PersonDetailFragment.java
@@ -5,8 +5,11 @@
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.support.v4.view.GestureDetectorCompat;
+import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
@@ -17,7 +20,9 @@
import com.facebook.drawee.view.SimpleDraweeView;
import static android.app.Activity.RESULT_OK;
-public class PersonDetailFragment extends Fragment {
+public class PersonDetailFragment extends Fragment implements
+ GestureDetector.OnGestureListener,
+ GestureDetector.OnDoubleTapListener{
private static EditText editText;
private SimpleDraweeView imageView;
@@ -25,6 +30,7 @@ public class PersonDetailFragment extends Fragment {
private static final String ARG_DESCRIPTION = "description";
private static final String ARG_PERSON_ID = "personId";
private long personId = -1;
+ private GestureDetectorCompat gestureDetectorCompat;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -61,6 +67,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
if (savedInstanceState != null) {
editText.setText(savedInstanceState.getString(ARG_DESCRIPTION));
}
+
+ gestureDetectorCompat = new GestureDetectorCompat(getContext(),this);
+ gestureDetectorCompat.setOnDoubleTapListener(this);
+
+ view.setOnTouchListener(new View.OnTouchListener() {
+ public boolean onTouch(View v, MotionEvent event) {
+ return gestureDetectorCompat.onTouchEvent(event);
+ }
+ });
return view;
}
@@ -91,12 +106,12 @@ protected Person doInBackground(final String... strings) {
MyApplication.getPersonDao().update(person);
// SQLite
- /* ContentValues updatedValues = new ContentValues();
- updatedValues.put(AppSQLiteOpenHelper.Columns.BIRTHDAY, birthday);
- MyApplication.personRepository.update(
- personId,
- updatedValues);
- */
+ /* ContentValues updatedValues = new ContentValues();
+ updatedValues.put(AppSQLiteOpenHelper.Columns.BIRTHDAY, birthday);
+ MyApplication.personRepository.update(
+ personId,
+ updatedValues);
+ */
return person;
}
@@ -158,4 +173,51 @@ protected void onPostExecute(final Person person) {
editText.setText(person.getNote());
}
}
+
+ @Override
+ public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) {
+ return true;
+ }
+
+ @Override
+ public boolean onDoubleTapEvent(MotionEvent event) {
+ return true;
+ }
+
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent event) {
+ return true;
+ }
+
+ @Override
+ public boolean onDown(MotionEvent event) {
+ return true;
+ }
+
+ @Override
+ public void onShowPress(MotionEvent event) {}
+
+ @Override
+ public void onLongPress(MotionEvent event) {}
+
+ @Override
+ public boolean onDoubleTap(MotionEvent event) {
+ return true;
+ }
+
+ @Override
+ public boolean onFling(MotionEvent event1, MotionEvent event2,
+ float velocityX, float velocityY) {
+ float deltaX = event1.getX() - event2.getX();
+ float deltaY = event1.getY() - event2.getY();
+ if ((Math.abs(deltaY) > Math.abs(deltaX)) && (deltaY < 0)) {
+ getActivity().onBackPressed();
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onSingleTapUp(MotionEvent event) {
+ return true;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/PersonListActivity.java b/app/src/main/java/com/example/anna/myapplication/presentation/PersonListActivity.java
index 8e0e0bb..2ef04f3 100644
--- a/app/src/main/java/com/example/anna/myapplication/presentation/PersonListActivity.java
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/PersonListActivity.java
@@ -6,7 +6,7 @@
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
-import android.util.Log;
+import android.view.MotionEvent;
import android.view.View;
import com.example.anna.myapplication.R;
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/RoomDB.java b/app/src/main/java/com/example/anna/myapplication/presentation/RoomDB.java
index f40c511..6cabb61 100644
--- a/app/src/main/java/com/example/anna/myapplication/presentation/RoomDB.java
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/RoomDB.java
@@ -37,8 +37,8 @@ protected void onCreate(Bundle savedInstanceState) {
nextButton = findViewById(R.id.nextScreenButton);
nextButton.setOnClickListener(view -> {
- // Intent startActivity = new Intent(this, RoomDB.class);
- //startActivity(startActivity);
+ Intent startActivity = new Intent(this, IntentServiceActivity.class);
+ startActivity(startActivity);
});
backButton = findViewById(R.id.to_first_activity_button);
diff --git a/app/src/main/java/com/example/anna/myapplication/presentation/TouchActivity.java b/app/src/main/java/com/example/anna/myapplication/presentation/TouchActivity.java
new file mode 100644
index 0000000..341be4b
--- /dev/null
+++ b/app/src/main/java/com/example/anna/myapplication/presentation/TouchActivity.java
@@ -0,0 +1,61 @@
+package com.example.anna.myapplication.presentation;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.widget.TextView;
+
+import com.example.anna.myapplication.R;
+
+public class TouchActivity extends AppCompatActivity {
+
+ private TextView textView;
+ private String sDown, sMove, sUp;
+ private float downX, downY;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.touch);
+ textView = findViewById(R.id.text_view_for_motion);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ super.onTouchEvent(event);
+
+ float x = event.getX();
+ float y = event.getY();
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN: // нажатие
+ sDown = "Down: " + x + "," + y;
+ sMove = ""; sUp = "";
+
+ downX = event.getX();
+ downY = event.getY();
+ break;
+ case MotionEvent.ACTION_MOVE: // движение
+ sMove = "Move: " + x + "," + y;
+ break;
+ case MotionEvent.ACTION_UP: // отпускание
+ case MotionEvent.ACTION_CANCEL:
+ sMove = "";
+ sUp = "Up: " + x + "," + y;
+
+ float upX = event.getX();
+ float upY = event.getY();
+
+ float deltaX = downX - upX;
+ float deltaY = downY - upY;
+ if ((Math.abs(deltaY) > Math.abs(deltaX)) && (deltaY < 0)) {
+ Intent startActivity = new Intent(TouchActivity.this, MainActivity.class);
+ startActivity(startActivity);
+ }
+ break;
+ }
+ textView.setText(sDown + "\n" + sMove + "\n" + sUp);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/intent_service.xml b/app/src/main/res/layout/intent_service.xml
new file mode 100644
index 0000000..eb4bb0a
--- /dev/null
+++ b/app/src/main/res/layout/intent_service.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/touch.xml b/app/src/main/res/layout/touch.xml
new file mode 100644
index 0000000..ff2f41b
--- /dev/null
+++ b/app/src/main/res/layout/touch.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cb1af09..5dd164b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -16,4 +16,6 @@
try everything
Start the cat
Next screen
+ Load Database
+ ERROR happened during database showing
diff --git a/keystores/test_release.properties b/keystores/test_release.properties
new file mode 100644
index 0000000..7c420d0
--- /dev/null
+++ b/keystores/test_release.properties
@@ -0,0 +1,4 @@
+releaseSignKeyAlias=key0
+releaseSignKeyPassword=iwillseeyouagain
+releaseStoreFilePath=..\\keystores\\debug_keystore.jks
+releaseStorePassword=lolkekyouloh
\ No newline at end of file
diff --git a/keystores/test_release_keystore.jks b/keystores/test_release_keystore.jks
new file mode 100644
index 0000000..33cf1d3
Binary files /dev/null and b/keystores/test_release_keystore.jks differ