diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60dad6c..40543a8 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..eeab1c6 --- /dev/null +++ b/app/src/main/java/com/example/anna/myapplication/data/LoadDatabaseIntentService.java @@ -0,0 +1,36 @@ +package com.example.anna.myapplication.data; + +import java.io.FileInputStream; +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 { + + private FileOutputStream fileOutputStream = null; + + 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 = openFileOutput(fileName, Context.MODE_PRIVATE); + fileOutputStream.write(databaseBackup.getBytes()); + fileOutputStream.close(); + } 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..26f55c6 --- /dev/null +++ b/app/src/main/java/com/example/anna/myapplication/presentation/IntentServiceActivity.java @@ -0,0 +1,41 @@ +package com.example.anna.myapplication.presentation; + +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; + + @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)); + } + + }); + } +} 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..716f096 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, IntentServiceActivity.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/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/res/layout/intent_service.xml b/app/src/main/res/layout/intent_service.xml new file mode 100644 index 0000000..dc52d19 --- /dev/null +++ b/app/src/main/res/layout/intent_service.xml @@ -0,0 +1,27 @@ + + + +