diff --git a/.all-contributorsrc b/.all-contributorsrc
deleted file mode 100644
index 8eecfd69ffd5c70d742ed9a9c35fb888c3c0e9e0..0000000000000000000000000000000000000000
--- a/.all-contributorsrc
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "files": [
- "README.md"
- ],
- "imageSize": 100,
- "commit": false,
- "contributors": [
- {
- "login": "rhayes2",
- "name": "Ryan Hayes",
- "avatar_url": "https://avatars3.githubusercontent.com/u/43277456?v=4",
- "profile": "https://github.com/rhayes2",
- "contributions": [
- "maintenance",
- "ideas",
- "bug"
- ]
- }
- ],
- "contributorsPerLine": 7,
- "projectName": "Image-Steganography-Library-Android",
- "projectOwner": "aagarwal1012",
- "repoType": "github",
- "repoHost": "https://github.com"
-}
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index a5561776f974d7010927c19b0c3f250c70e0e3ac..0000000000000000000000000000000000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-# These are supported funding model platforms
-
-# github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
-patreon: aagarwal1012
-# open_collective: # Replace with a single Open Collective username
-# ko_fi: # Replace with a single Ko-fi username
-# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
-# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
-custom: https://www.paypal.me/aagarwal1012
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 6136f5951cf8a75015a569444ac28f4e000ae6ce..0000000000000000000000000000000000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 066b2d920a28db73b4ba3a0b35e6905eeeef5772..0000000000000000000000000000000000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..2312fb6dfb7cd2c842e0ee386a4cf4806c05ae68
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.0.1-SNAPSHOT
+
+ohos 第一个版本,完整实现了原库的全部 api
\ No newline at end of file
diff --git a/ImageSteganographyLibrary/build.gradle b/ImageSteganographyLibrary/build.gradle
deleted file mode 100644
index 882190df1845a9d6d6388fecaa484f3f5f35840d..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/build.gradle
+++ /dev/null
@@ -1,42 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion 26
-
-
-
- defaultConfig {
- minSdkVersion 19
- targetSdkVersion 26
- versionCode 1
- versionName "1.0"
-
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
-
-
-
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-
-}
-
-configurations.all {
- resolutionStrategy {
- force 'com.android.support:support-annotations:23.1.1'
- }
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
-
- implementation 'com.android.support:appcompat-v7:26.1.0'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-}
diff --git a/ImageSteganographyLibrary/proguard-rules.pro b/ImageSteganographyLibrary/proguard-rules.pro
deleted file mode 100644
index f1b424510da51fd82143bc74a0a801ae5a1e2fcd..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/ImageSteganographyLibrary/src/androidTest/java/com/ayush/imagesteganographylibrary/ExampleInstrumentedTest.java b/ImageSteganographyLibrary/src/androidTest/java/com/ayush/imagesteganographylibrary/ExampleInstrumentedTest.java
deleted file mode 100644
index 9f859983ed0282f25baf9f42224b4e3922aba27f..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/androidTest/java/com/ayush/imagesteganographylibrary/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.ayush.imagesteganographylibrary;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
- assertEquals("com.ayush.steganographylibrary.test", appContext.getPackageName());
- }
-}
diff --git a/ImageSteganographyLibrary/src/main/AndroidManifest.xml b/ImageSteganographyLibrary/src/main/AndroidManifest.xml
deleted file mode 100644
index 964638d6effe1c23a77be106090bef9583bb8843..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
\ No newline at end of file
diff --git a/ImageSteganographyLibrary/src/main/ic_launcher-web.png b/ImageSteganographyLibrary/src/main/ic_launcher-web.png
deleted file mode 100644
index 4b4c6282282b18d6974d3091d8020d5d47c1ea55..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/ic_launcher-web.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java
deleted file mode 100644
index 9dc0be470dce7f7a24c93d15a8f49b27b8a25a69..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.ayush.imagesteganographylibrary.Text;
-
-import android.app.Activity;
-import android.app.ProgressDialog;
-import android.graphics.Bitmap;
-import android.os.AsyncTask;
-import android.util.Log;
-
-import com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback.TextDecodingCallback;
-import com.ayush.imagesteganographylibrary.Utils.Utility;
-
-import java.util.List;
-
-/**
- * In this class all those method in EncodeDecode class are used to decode secret message in image.
- * All the tasks will run in background.
- */
-public class TextDecoding extends AsyncTask {
-
- //Tag for Log
- private final static String TAG = TextDecoding.class.getName();
-
- private final ImageSteganography result;
- //Callback interface for AsyncTask
- private final TextDecodingCallback textDecodingCallback;
- private ProgressDialog progressDialog;
-
- public TextDecoding(Activity activity, TextDecodingCallback textDecodingCallback) {
- super();
- this.progressDialog = new ProgressDialog(activity);
- this.textDecodingCallback = textDecodingCallback;
- //making result object
- this.result = new ImageSteganography();
- }
-
- //setting progress dialog if wanted
- public void setProgressDialog(ProgressDialog progressDialog) {
- this.progressDialog = progressDialog;
- }
-
- //pre execution of method
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
-
- //setting parameters of progress dialog
- if (progressDialog != null) {
- progressDialog.setMessage("Loading, Please Wait...");
- progressDialog.setTitle("Decoding Message");
- progressDialog.setIndeterminate(true);
- progressDialog.setCancelable(false);
- progressDialog.show();
-
- }
- }
-
- @Override
- protected void onPostExecute(ImageSteganography imageSteganography) {
- super.onPostExecute(imageSteganography);
-
- //dismiss progress dialog
- if (progressDialog != null)
- progressDialog.dismiss();
-
- //sending result to callback
- textDecodingCallback.onCompleteTextEncoding(result);
- }
-
- @Override
- protected ImageSteganography doInBackground(ImageSteganography... imageSteganographies) {
-
- //If it is not already decoded
- if (imageSteganographies.length > 0) {
-
- ImageSteganography imageSteganography = imageSteganographies[0];
-
- //getting bitmap image from file
- Bitmap bitmap = imageSteganography.getImage();
-
- //return null if bitmap is null
-// if (bitmap == null)
-// return null;
-
- //splitting images
- List srcEncodedList = Utility.splitImage(bitmap);
-
- //decoding encrypted zipped message
- String decoded_message = EncodeDecode.decodeMessage(srcEncodedList);
-
- Log.d(TAG, "Decoded_Message : " + decoded_message);
-
- //text decoded = true
- if (!Utility.isStringEmpty(decoded_message)) {
- result.setDecoded(true);
- }
-
- //decrypting the encoded message
- String decrypted_message = ImageSteganography.decryptMessage(decoded_message, imageSteganography.getSecret_key());
- Log.d(TAG, "Decrypted message : " + decrypted_message);
-
- //If decrypted_message is null it means that the secret key is wrong otherwise secret key is right.
- if (!Utility.isStringEmpty(decrypted_message)) {
-
- //secret key provided is right
- result.setSecretKeyWrong(false);
-
- // Set Results
-
- result.setMessage(decrypted_message);
-
-
- //free memory
- for (Bitmap bitm : srcEncodedList)
- bitm.recycle();
-
- //Java Garbage Collector
- System.gc();
- }
- }
-
- return result;
- }
-}
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java
deleted file mode 100644
index 2f32a7aae61ebe137031d983eba8a6de75472bf9..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.ayush.imagesteganographylibrary.Text;
-
-import android.app.Activity;
-import android.app.ProgressDialog;
-import android.graphics.Bitmap;
-import android.os.AsyncTask;
-import android.util.Log;
-
-import com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback.TextEncodingCallback;
-import com.ayush.imagesteganographylibrary.Utils.Utility;
-
-import java.util.List;
-
-/**
- * In this class all those method in EncodeDecode class are used to encode secret message in image.
- * All the tasks will run in background.
- */
-public class TextEncoding extends AsyncTask {
-
- //Tag for Log
- private static final String TAG = TextEncoding.class.getName();
-
- private final ImageSteganography result;
- //Callback interface for AsyncTask
- private final TextEncodingCallback callbackInterface;
- private int maximumProgress;
- private final ProgressDialog progressDialog;
-
- public TextEncoding(Activity activity, TextEncodingCallback callbackInterface) {
- super();
- this.progressDialog = new ProgressDialog(activity);
- this.callbackInterface = callbackInterface;
- //making result object
- this.result = new ImageSteganography();
- }
-
- //pre execution of method
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
-
- //setting parameters of progress dialog
- if (progressDialog != null) {
- progressDialog.setMessage("Loading, Please Wait...");
- progressDialog.setTitle("Encoding Message");
- progressDialog.setIndeterminate(false);
- progressDialog.setCancelable(false);
- progressDialog.show();
- }
- }
-
- @Override
- protected void onPostExecute(ImageSteganography textStegnography) {
- super.onPostExecute(textStegnography);
-
- //dismiss progress dialog
- if (progressDialog != null) {
- progressDialog.dismiss();
- }
-
- //Sending result to callback interface
- callbackInterface.onCompleteTextEncoding(result);
- }
-
- @Override
- protected void onProgressUpdate(Integer... values) {
- super.onProgressUpdate(values);
-
- //Updating progress dialog
- if (progressDialog != null) {
- progressDialog.incrementProgressBy(values[0]);
- }
- }
-
- @Override
- protected ImageSteganography doInBackground(ImageSteganography... imageSteganographies) {
-
- maximumProgress = 0;
-
- if (imageSteganographies.length > 0) {
-
- ImageSteganography textStegnography = imageSteganographies[0];
-
- //getting image bitmap
- Bitmap bitmap = textStegnography.getImage();
-
- //getting height and width of original image
- int originalHeight = bitmap.getHeight();
- int originalWidth = bitmap.getWidth();
-
- //splitting bitmap
- List src_list = Utility.splitImage(bitmap);
-
- //encoding encrypted compressed message into image
-
- List encoded_list = EncodeDecode.encodeMessage(src_list, textStegnography.getEncrypted_message(), new EncodeDecode.ProgressHandler() {
-
- //Progress Handler
- @Override
- public void setTotal(int tot) {
- maximumProgress = tot;
- progressDialog.setMax(maximumProgress);
- Log.d(TAG, "Total Length : " + tot);
- }
-
- @Override
- public void increment(int inc) {
- publishProgress(inc);
- }
-
- @Override
- public void finished() {
- Log.d(TAG, "Message Encoding end....");
- progressDialog.setIndeterminate(true);
- }
- });
-
- //free Memory
- for (Bitmap bitm : src_list)
- bitm.recycle();
-
- //Java Garbage collector
- System.gc();
-
- //merging the split encoded image
- Bitmap srcEncoded = Utility.mergeImage(encoded_list, originalHeight, originalWidth);
-
- //Setting encoded image to result
- result.setEncoded_image(srcEncoded);
- result.setEncoded(true);
- }
-
- return result;
- }
-}
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java
deleted file mode 100644
index ff9fe0ccd0ed2214689f5f3ed5ce7d825481bea0..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.ayush.imagesteganographylibrary.Utils;
-
-import android.util.Log;
-
-import java.util.Arrays;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.SecretKeySpec;
-
-public class Crypto {
-
- //Encryption Method
- /*
- @parameter : Message {String}, Secret key {String}
- @return : Encrypted Message {String}
- */
- public static String encryptMessage(String message, String secret_key) throws Exception {
-
- // Creating key and cipher
- SecretKeySpec aesKey = new SecretKeySpec(secret_key.getBytes(), "AES");
- Cipher cipher;
-
- //AES cipher
- cipher = Cipher.getInstance("AES");
-
- // encrypt the text
- cipher.init(Cipher.ENCRYPT_MODE, aesKey);
-
- byte[] encrypted;
-
- encrypted = cipher.doFinal(message.getBytes());
-
- Log.d("crypto", "Encrypted in crypto (mine): " + Arrays.toString(encrypted) + "string: " + android.util.Base64.encodeToString(cipher.doFinal(message.getBytes()), 0));
-
- Log.d("crypto", "Encrypted in crypto (theirs): " + Arrays.toString(cipher.doFinal(message.getBytes())) + "string : " + new String(encrypted));
-
- return android.util.Base64.encodeToString(cipher.doFinal(message.getBytes()), 0);
- }
-
- //Decryption Method
- /*
- @parameter : Encrypted Message {String}, Secret key {String}
- @return : Message {String}
- */
- public static String decryptMessage(String encrypted_message, String secret_key) throws Exception {
-
- Log.d("Decrypt", "message: + " + encrypted_message);
- // Creating key and cipher
- SecretKeySpec aesKey = new SecretKeySpec(secret_key.getBytes(), "AES");
- Cipher cipher;
-
- //AES cipher
- cipher = Cipher.getInstance("AES");
-
- // decrypting the text
- cipher.init(Cipher.DECRYPT_MODE, aesKey);
- String decrypted;
- byte[] decoded;
- decoded = android.util.Base64.decode(encrypted_message.getBytes(), 0);
- decrypted = new String(cipher.doFinal(decoded));
-
- //returning decrypted text
- return decrypted;
- }
-
-}
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java
deleted file mode 100644
index fde500e6382c7ee5aaedda91b69d20b723412b58..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.ayush.imagesteganographylibrary.Utils;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/*
-This class has methods used to compress and decompress encrypted message.
- */
-
-class Zipping {
-
- final static String TAG = Zipping.class.getName();
-
- /*
- @parameter : Encrypted message {String}
- @return : Compressed byte array
- */
-
- public static byte[] compress(String string) throws Exception {
-
- ByteArrayOutputStream os = new ByteArrayOutputStream(string.length());
-
- GZIPOutputStream gos = new GZIPOutputStream(os);
-
- gos.write(string.getBytes());
- gos.close();
-
- byte[] compressed = os.toByteArray();
- os.close();
-
- return compressed;
- }
-
-
- /*
- @parameter : byte array
- @return : Uncompressed encrypted_message {String}
- */
- public static String decompress(byte[] compressed) throws Exception {
-
- ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
-
- GZIPInputStream gis = new GZIPInputStream(bis);
-
- BufferedReader br = new BufferedReader(new InputStreamReader(gis, StandardCharsets.ISO_8859_1));
-
- StringBuilder sb = new StringBuilder();
-
- String line;
-
- while ((line = br.readLine()) != null) {
- sb.append(line);
- }
-
- br.close();
- gis.close();
- bis.close();
-
- return sb.toString();
- }
-
-}
diff --git a/ImageSteganographyLibrary/src/main/res/drawable/ic_launcher_background.xml b/ImageSteganographyLibrary/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 01f0af0add58c1ae4e6d5b296cce73d9f9c99df1..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/ImageSteganographyLibrary/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index c4a603d4cce78b2fbd8094bd0224d4778bc8c976..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/ImageSteganographyLibrary/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index c4a603d4cce78b2fbd8094bd0224d4778bc8c976..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher.png b/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 5a2f01fe1c1cc8dd09b4d89bf71d3c41c427092e..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index aef4adf9031b13a2c9dffdc343abd09dd54321bd..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher_round.png b/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index c6300b9efc5d8e313a81a07ead6e385ff9e5fa82..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher.png b/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 278e7a994bcba49d229fcaaa46d3b6799c16e0ef..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index bd9021fefd17713a2edc3d288232ecb081cc1ca3..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher_round.png b/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 09db570abf0a1a04c7b18ef0aff70f26e64af5cc..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher.png b/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index d63dc5a60eb4ac2c33b110e864b29c8c2bfd7661..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index a34023faacf5779b9555b6db1c50b10ea6e34ff4..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 2970017c5b901df82af959132418099821e964da..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 722fe6ae1d6ef4ec1fa989811cd02542399d8b37..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 55a464b5cceb9d6760dc1175cd7ed8cfb7ad6109..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 16479cb1431ec35e14674840692f8d417f4cb2c4..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index dc465161e2818afb5a98415bb32c68bdd4f5937e..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index cf5912859664a135992f90114cffc116f1c48340..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 49140d401b1c8c587471fe2d422e757c75ccb9ab..0000000000000000000000000000000000000000
Binary files a/ImageSteganographyLibrary/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/ImageSteganographyLibrary/src/main/res/values/strings.xml b/ImageSteganographyLibrary/src/main/res/values/strings.xml
deleted file mode 100644
index 29d1a964ea57b6de2735bc33fafe43f303be5bd0..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- Steganography Library
-
diff --git a/ImageSteganographyLibrary/src/test/java/com/ayush/imagesteganographylibrary/ExampleUnitTest.java b/ImageSteganographyLibrary/src/test/java/com/ayush/imagesteganographylibrary/ExampleUnitTest.java
deleted file mode 100644
index d6c8a44a54bf0c0aad1ed027364386dbb8fb5bc2..0000000000000000000000000000000000000000
--- a/ImageSteganographyLibrary/src/test/java/com/ayush/imagesteganographylibrary/ExampleUnitTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ayush.imagesteganographylibrary;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file
diff --git a/README.OPENSOURCE.md b/README.OPENSOURCE.md
new file mode 100644
index 0000000000000000000000000000000000000000..60de59092511d98626be7f16cca370a9e06e1eec
--- /dev/null
+++ b/README.OPENSOURCE.md
@@ -0,0 +1,10 @@
+[
+ {
+ "Name":"Image_Steganography_Library_ohos",
+ "License":"MIT License",
+ "License File":"https://gitee.com/chinasoft3_ohos/Image-Steganography-Library-Android/blob/master/LICENSE",
+ "Version Number":"v1.1",
+ "Upstream URL":"https://github.com/aagarwal1012/Image-Steganography-Library-Android",
+ "Description":"使用LSB将加密信息编码嵌入到图片中,实现隐写",
+ }
+]
\ No newline at end of file
diff --git a/README.md b/README.md
index a2cf09e60879cabef5d2d1372a1831dd0d06b19f..d67c174d0b50bdbcfcaab73f836e0f04cebbaeac 100644
--- a/README.md
+++ b/README.md
@@ -1,253 +1,192 @@
-
-
-
-# Image Steganography
-Steganography is the process of hiding a secret message within a larger one in such a way that someone cannot know the presence or contents of the hidden message. Although related, Steganography is not to be confused with Encryption, which is the process of making a message unintelligible—Steganography attempts to hide the existence of communication.
-The main advantage of steganography algorithm is because of its simple security mechanism. Because the steganographic message is integrated invisibly and covered inside other harmless sources, it is very difficult to detect the message without knowing
-the existence and the appropriate encoding scheme .
-
-# Proposed Algorithm
-The algorithm is more dedicated towards the algorithm proposed by Rosziati Ibrahim and Teoh Suk Kuan in their [Research Paper](https://arxiv.org/ftp/arxiv/papers/1112/1112.2809.pdf) published on February 25, 2011.
-## Encoding Algorithm
-- Firstly, the secret message that is extracted is `compressed` as the contents in the compressed string will significantly hard to detect and read, furthermore it reduces the size of string.
-- Secondly, the compressed string is `encrypted` with the secret key.
-- Finally, `encoding` the encrypted message in the image. It uses `LSB steganographic embedding` to encode data into an image. Once the message is encoded the process stops.
-### LSB(Least Significant Bit) Embedding
-The LSB is the lowest significant bit in the byte value of the image pixel.
-The LSB based image steganography embeds the secret in the least significant bits of pixel values of the cover image (CVR).
-The concept of LSB Embedding is simple. It exploits the fact that the level of precision in many image formats is far greater than that perceivable by average human vision. Therefore, an altered image with slight variations in its colors will be indistinguishable from the original by a human being, just by looking at it. In conventional LSB technique, which requires eight bytes of pixels to store 1byte of secret data but in proposed LSB technique, just four bytes of pixels are sufficient to hold one message byte. Rest of the bits in the pixels remains the same.
-Following shows the bit level interpretation of the algorithm :
-
-
-## Decoding Algorithm
-- Firstly, `decode` the message from the encrypted image using LSB decoding.
-
-- Secondly, `decrypt` the compressed message from the decoded message using the secret key.
-
-- Finally, `decompress` the message to get the original compressed message.
-
-Consider the following encoding, it is totally undetectable by human eyes.
-
-
-# Usage
-Add it in your root `build.gradle` at the end of repositories:
-```groovy
-allprojects {
- repositories {
- ...
- maven { url 'https://jitpack.io' }
- }
-}
+# Image-Steganography-Library
+
+### 项目介绍
+
+- *项目名称:Image-Steganography-Library-ohos*
+
+- 所属系列:openharmony的第三方组件适配移植
+
+- 功能:使用LSB将加密信息编码嵌入到图片中,实现隐写
+
+- 基线版本:Image-Steganography-Library v1.1
+
+- 项目移植状态:主功能完成
+
+- 调用差异:无
+
+- 开发版本:sdk5,DevEco Studio2.1 beta3
+
+
+### 效果演示
+
+
+
+### 安装教程
+1.在项目根目录下的build.gradle文件中,
+ ```
+ allprojects {
+ repositories {
+ maven {
+ url 'https://s01.oss.sonatype.org/content/repositories/snapshots/'
+ }
+ }
+ }
+```
+2.在entry模块的build.gradle文件中,
+ ```
+ dependencies {
+ implementation 'com.gitee.chinasoft_ohos:ImageSteganography:0.0.1-SNAPSHOT'
+ ......
+ }
+```
+
+在sdk5,DevEco Studio2.1 beta3下项目可直接运行
+如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件,
+并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下
+
+### 使用说明
+
+How to encode message into an image:
+
+- Your Ability class should implements TextEncodingCallback interface and also contains its override methods.
+```JAVA
+public class Encode extends Ability implements TextEncodingCallback
+
+```
+
+- Firstly, instantiate the ImageSteganography object and pass the values Message , Secret Key and Image Bitmap to the constructor.
+
+```JAVA
+ImageSteganography imageSteganography = new ImageSteganography(message,
+ secret_key,
+ original_image);
+```
+
+- Secondly, instantiate the TextEncoding object and pass the values Activity and TextEncodingCallback object to the constructor.
+
+```JAVA
+
+ TextEncoding textEncoding = new TextEncoding(Encode.this, Encode.this);
+
+```
+
+- Finally, execute our encoding task.
+
+```JAVA
+
+ textEncoding.inBack(imageSteganography);
+
+```
+
+- OnStartTextEncoding() : In this method you can whatever by the start of text encoding process.
+
+```JAVA
+
+ @Override
+ public void onStartTextEncoding() {
+ //Whatever you want to do at the start of text encoding
+ }
+
```
-Now add the following dependency in your app's `build.gradle`
-```groovy
-dependencies {
- implementation 'com.github.aagarwal1012:Image-Steganography-Library-Android:v1.0'
-}
+
+- onCompleteTextEncoding() : After the completion of text encoding, this method is called and gives result.
+
+```JAVA
+
+ @Override
+ public void onCompleteTextEncoding(ImageSteganography result) {
+
+ //After the completion of text encoding.
+
+ //result object is instantiated
+ this.result = result;
+
+ if (result != null && result.isEncoded()){
+
+ //encrypted image bitmap is extracted from result object
+ encoded_image = result.getEncrypted_image();
+
+ //set text and image to the UI component.
+ textView.setText("Encoded");
+ imageView.setImageBitmap(encoded_image);
+ }
+
```
-## How to encode message into an image ?
-**Note :** Your Activity class should implements `TextEncodingCallback` interface and also contains its `override` methods.
-```java
-public class MainActivity extends AppCompatActivity implements TextEncodingCallback
+
+How to decode message from an image ?
+
+- Your Ability class should implements TextDecodingCallback interface and also contains its override methods.
+
+```JAVA
+public class Decode extends Ability implements TextDecodingCallback
```
-- Firstly, instantiate the `ImageSteganography` object and pass the values `Message `, `Secret Key` and `Image Bitmap` to the constructor.
-
- ```java
- ImageSteganography imageSteganography = new ImageSteganography(message,
- secret_key,
- original_image);
- ```
-
-- Secondly, instantiate the `TextEncoding` object and pass the values `Activity` and `TextEncodingCallback` object to the constructor.
-
- ```java
- TextEncoding textEncoding = new TextEncoding(MainActivity.this,
- MainActivity.this);
- ```
-
-- Finally, execute our `encoding` task.
-
- ```java
- textEncoding.execute(imageSteganography);
- ```
-**Note** : By default a `ProgressDialog` will appear in the process of text encoding.
-
-#### Override Methods
-
-- `OnStartTextEncoding()` : In this method you can whatever by the start of text encoding process.
-
- ```java
- @Override
- public void onStartTextEncoding() {
- //Whatever you want to do at the start of text encoding
- }
- ```
-
-- `onCompleteTextEncoding()` : After the completion of text encoding, this method is called and gives result.
-
- ```java
- @Override
- public void onCompleteTextEncoding(ImageSteganography result) {
-
- //After the completion of text encoding.
-
- //result object is instantiated
- this.result = result;
-
- if (result != null && result.isEncoded()){
-
- //encrypted image bitmap is extracted from result object
- encoded_image = result.getEncrypted_image();
-
- //set text and image to the UI component.
- textView.setText("Encoded");
- imageView.setImageBitmap(encoded_image);
- }
- ```
-## How to decode message from an image ?
-**Note :** Your Activity class should implements `TextDecodingCallback` interface and also contains its `override` methods.
-
-```java
-public class MainActivity extends AppCompatActivity implements TextDecodingCallback
+
+- Firstly, instantiate the ImageSteganography object and pass the values Secret Key and Image PixelMap to the constructor.
+
+```JAVA
+ImageSteganography imageSteganography = new ImageSteganography(secret_key,
+ original_image);
```
-- Firstly, instantiate the `ImageSteganography` object and pass the values `Secret Key` and `Image Bitmap` to the constructor.
-
- ```java
- ImageSteganography imageSteganography = new ImageSteganography(secret_key,
- original_image);
- ```
-
-- Secondly, instantiate the `TextDecoding` object and pass the values `Activity` and `TextDecodingCallback` object to the constructor.
-
- ```java
- TextDecoding textDecoding = new TextDecoding(MainActivity.this,
- MainActivity.this);
- ```
-
-- Finally, execute our `decoding` task.
-
- ```java
- textDecoding.execute(imageSteganography);
- ```
- **Note** : By default a `ProgressDialog` will appear in the process of text decoding.
-
-#### Override Methods
-
-- `OnStartTextDecoding()` : In this method you can whatever by the start of text decoding process.
-
- ```java
- @Override
- public void onStartTextDecoding() {
- //Whatever you want to do at the start of text encoding
- }
- ```
-
-- `onCompleteTextDecoding()` : After the completion of text decoding, this method is called and gives result.
-
- ```java
- @Override
- public void onCompleteTextEncoding(ImageSteganography result) {
-
- //After the completion of text encoding.
-
- //result object is instantiated
- this.result = result;
-
- if (result != null){
-
- /* If result.isDecoded() is false, it means no Message was found in the image. */
- if (!result.isDecoded())
- textView.setText("No message found");
-
- else{
- /* If result.isSecretKeyWrong() is true, it means that secret key provided is wrong. */
- if (!result.isSecretKeyWrong()){
- //set the message to the UI component.
- textView.setText("Decoded");
- message.setText("" + result.getMessage());
- }
- else {
- textView.setText("Wrong secret key");
- }
- }
- }
- else {
- //If result is null it means that bitmap is null
- textView.setText("Select Image First");
- }
- }
- ```
-# Documentation
-
-#### ImageSteganography Class
-
-| Java attribute | Java set methods | Description | Default Value |
-| :---------------- | :------------------------------ | :----------------------------------------------------------- | :-----------: |
-| Message | setMessage(...) , getMessage() | Set the value of message, Get the value of message. | Null |
-| Secret_Key | setSecret_key(...) | Set the value of secret key. | Null |
-| Image | setImage(...) | Set the value of image. | Null |
-| Encoded_Image | getEncoded_image() | Get the value of encoded image after text encoding. | Null |
-| Encoded | isEncoded() | Check that the encoding is over or not | false |
-| Decoded | isDecoded() | Check that the decoding is over or not. | false |
-| SecretKeyWrong | isSecretKeyWrong() | Check that the secret key provided was right or wrong but after decoding was done. | true |
-
-#### Class Domain Diagram
-
-
-
-### Example App
-
-There are two options `Encode` and `Decode`. In the encode section you can hide a secret message into an image without making any noticeable changes. In the decode section you can extract the message from the encoded image by inserting the correct key.
-
-**Note** - After pressing the `Save` button, both the original and encoded images are saved at the location ```Android/data/com.ayush.steganography/files/Documents// ```
-
-| Encode | Decode |
-| :----------------------------------------------------------: | :----------------------------------------------------------: |
-| | |
-# Want to contribute !
-
-This is the well `documented` library. I have documented each and every method that I have used, so have a good read to the code and suggest some changes and new feature to be added in the library.
-Feel free to open an issue .
-
-# Donate
-> If you found this project helpful or you learned something from the source code and want to thank me, consider buying me a cup of :coffee:
->
-> - [PayPal](https://www.paypal.me/aagarwal1012/)
-
-## Contributors ✨
-
-Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
-
-
-
-
-
-
-
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
-
-# License
-**Image Steganography** is licensed under `MIT license`.
+
+- Secondly, instantiate the TextDecoding object and pass the values Activity and TextDecodingCallback object to the constructor.
+
+```JAVA
+ TextDecoding textDecoding = new TextDecoding(Decode.this, Decode.this);
+```
+
+- Finally, execute our decoding task.
+
+```JAVA
+textDecoding.doInBackground(imageSteganography);
+```
+
+- OnStartTextDecoding() : In this method you can whatever by the start of text decoding process.
+
+```JAVA
+@Override
+ public void onStartTextDecoding() {
+ //Whatever you want to do at the start of text encoding
+ }
+```
+
+- onCompleteTextDecoding() : After the completion of text decoding, this method is called and gives result.
+
+```JAVA
+@Override
+ public void onCompleteTextEncoding(ImageSteganography result) {
+ //By the end of textDecoding
+ if (result != null) {
+ if (!result.isDecoded())
+ whether_encoded.setText("No message found");
+ else {
+ if (!result.isSecretKeyWrong()) {
+ message.setText("" + result.getMessage());
+ } else {
+ textView.setText("Wrong secret key");
+ }
+ }
+ } else {
+ whether_encoded.setText("Select Image First");
+ }
+ }
+```
+
+### 测试信息
+
+CodeCheck代码测试无异常
+
+CloudTest代码测试无异常
+
+火绒安全病毒安全检测通过
+
+当前版本demo功能与原组件基本无差异
+
+### 版本迭代
+
+- 0.0.1-SNAPSHOT
+
+### 版权和许可信息
```
MIT License
diff --git a/UML/Stegmodel.mdj b/UML/Stegmodel.mdj
deleted file mode 100644
index 687c23fdad8cfef585ba27b603fc56d4b90208e9..0000000000000000000000000000000000000000
--- a/UML/Stegmodel.mdj
+++ /dev/null
@@ -1,9800 +0,0 @@
-{
- "_type": "Project",
- "_id": "AAAAAAFF+h6SjaM2Hec=",
- "name": "Untitled",
- "ownedElements": [
- {
- "_type": "UMLModel",
- "_id": "AAAAAAFF+qBWK6M3Z8Y=",
- "_parent": {
- "$ref": "AAAAAAFF+h6SjaM2Hec="
- },
- "name": "Model",
- "ownedElements": [
- {
- "_type": "UMLClassDiagram",
- "_id": "AAAAAAFF+qBtyKM79qY=",
- "_parent": {
- "$ref": "AAAAAAFF+qBWK6M3Z8Y="
- },
- "name": "Main",
- "defaultDiagram": true
- }
- ]
- },
- {
- "_type": "UMLModel",
- "_id": "AAAAAAFnjpd2FQ5D7EM=",
- "_parent": {
- "$ref": "AAAAAAFF+h6SjaM2Hec="
- },
- "name": "Model1",
- "ownedElements": [
- {
- "_type": "UMLClassDiagram",
- "_id": "AAAAAAFnjpd2Fg5EewU=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "ClassDiagram1",
- "ownedViews": [
- {
- "_type": "RectangleView",
- "_id": "AAAAAAFnjwcIvUFaUh4=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "lineColor": "#82abff",
- "font": "Arial;28;0",
- "left": 160,
- "top": 184,
- "width": 736,
- "height": 880
- },
- {
- "_type": "RectangleView",
- "_id": "AAAAAAFnjr6kLxDEWQE=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "font": "Arial;13;0",
- "left": 2072,
- "top": 200,
- "width": 296,
- "height": 329
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjpeueQ5KROA=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjpeueg5LXIQ=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "model": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjpeueg5MsF0=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5LXIQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1200,
- "top": 320,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjpeueg5NXaY=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5LXIQ="
- },
- "font": "Arial;13;1",
- "left": 1045,
- "top": 463,
- "width": 282.87060546875,
- "height": 13,
- "text": "ImageSteganography"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjpeueg5Oieg=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5LXIQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1200,
- "top": 320,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjpeueg5P5kc=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5LXIQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1200,
- "top": 320,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 1040,
- "top": 456,
- "width": 292.87060546875,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjpeueg5MsF0="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjpeueg5NXaY="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjpeueg5Oieg="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjpeueg5P5kc="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjpeueg5QpPA=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "model": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpfiYg50AGA=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpfiOg5xtDk="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 486,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Message: String",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpjx1g6ENCg=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpjxqA6Bza4="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 501,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Secret_Key: String",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpj2UQ6Lujw=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpj2Iw6IYyA="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 516,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Encrypted_Message: String",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpkURw6Slw4=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpkUIA6PuiY="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 531,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Image: Bitmap",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpkbyQ6ZAU4=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpkbmw6WD7Y="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 546,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Encoded_Image: Bitmap",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpkfZA6glfQ=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpkfNQ6dzA0="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 561,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Encrypted_Zip: Byte [ ]",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpkjNA6nXnU=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpkjEA6kgi8="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 576,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Decoded: Boolean",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpkmDw6uVsQ=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpkl5w6rr/M="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 591,
- "width": 282.87060546875,
- "height": 13,
- "text": "+Encoded: Boolean",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjpkpAA613aY=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "model": {
- "$ref": "AAAAAAFnjpko3A6yrEM="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 606,
- "width": 282.87060546875,
- "height": 13,
- "text": "+SecretKeyWrong: Boolean",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1040,
- "top": 481,
- "width": 292.87060546875,
- "height": 143
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjpeueg5R7A4=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "model": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjstUxRWEruo=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5R7A4="
- },
- "model": {
- "$ref": "AAAAAAFnjstUmxWB8yM="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 629,
- "width": 282.87060546875,
- "height": 13,
- "underline": true,
- "text": "+ImgSteg(message, secret_key, image)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjszkeRZ/aWs=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5R7A4="
- },
- "model": {
- "$ref": "AAAAAAFnjszkVBZ2JHA="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 644,
- "width": 282.87060546875,
- "height": 13,
- "underline": true,
- "text": "+ImgSteg(secret_key, image)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjpgMoQ56GMI=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5R7A4="
- },
- "model": {
- "$ref": "AAAAAAFnjpgMeg53qk8="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 659,
- "width": 282.87060546875,
- "height": 13,
- "underline": true,
- "text": "+EncryptMessage()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjpvaSQ7Pk48=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5R7A4="
- },
- "model": {
- "$ref": "AAAAAAFnjpvaGQ7Mm1E="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 674,
- "width": 282.87060546875,
- "height": 13,
- "underline": true,
- "text": "+DecryptMessage()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjpvgOg7WZ9w=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueg5R7A4="
- },
- "model": {
- "$ref": "AAAAAAFnjpvgEw7TAVo="
- },
- "font": "Arial;13;0",
- "left": 1045,
- "top": 689,
- "width": 282.87060546875,
- "height": 13,
- "text": "+convertKeyTo128bit()",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1040,
- "top": 624,
- "width": 292.87060546875,
- "height": 83
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjpeueg5Sf/4=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "model": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 600,
- "top": 160,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjpeueg5Tz7A=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "model": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 600,
- "top": 160,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 1040,
- "top": 456,
- "width": 292.87060546875,
- "height": 251,
- "nameCompartment": {
- "$ref": "AAAAAAFnjpeueg5LXIQ="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjpeueg5QpPA="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjpeueg5R7A4="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjpeueg5Sf/4="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjpeueg5Tz7A="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjp66Gg7qarI=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjp66Gg7rbNE=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "model": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjp66Gg7sogU=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7rbNE="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2272,
- "top": -544,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjp66Gg7tOXQ=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7rbNE="
- },
- "font": "Arial;13;1",
- "left": 1493,
- "top": 55,
- "width": 577.90966796875,
- "height": 13,
- "text": "Crypto"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjp66Gg7uCTo=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7rbNE="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2272,
- "top": -544,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjp66Gg7vfHs=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7rbNE="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2272,
- "top": -544,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 1488,
- "top": 48,
- "width": 587.90966796875,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjp66Gg7sogU="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjp66Gg7tOXQ="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjp66Gg7uCTo="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjp66Gg7vfHs="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjp66Gg7w9mA=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "model": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "font": "Arial;13;0",
- "left": 1488,
- "top": 73,
- "width": 587.90966796875,
- "height": 10
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjp66Gg7xkoE=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "model": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjqAIFA8XlhU=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7xkoE="
- },
- "model": {
- "$ref": "AAAAAAFnjqAH7Q8U3pg="
- },
- "font": "Arial;13;0",
- "left": 1493,
- "top": 88,
- "width": 577.90966796875,
- "height": 13,
- "text": "+EncryptMessage(Message: String, Secret_Key: String)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjqJ6+A8/ON8=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7xkoE="
- },
- "model": {
- "$ref": "AAAAAAFnjqJ6yg84Zfc="
- },
- "font": "Arial;13;0",
- "left": 1493,
- "top": 103,
- "width": 577.90966796875,
- "height": 13,
- "text": "+DecryptMessage(EncryptMessage: String, Secret_Key: String)",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1488,
- "top": 83,
- "width": 587.90966796875,
- "height": 38
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjp66Gg7y7U0=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "model": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1136,
- "top": -272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjp66Gg7z1gI=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "model": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1136,
- "top": -272,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 1488,
- "top": 48,
- "width": 587.90966796875,
- "height": 73,
- "nameCompartment": {
- "$ref": "AAAAAAFnjp66Gg7rbNE="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjp66Gg7w9mA="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjp66Gg7xkoE="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjp66Gg7y7U0="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjp66Gg7z1gI="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjqSV+g9IUVE=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjqSV+g9JeUk=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9IUVE="
- },
- "model": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqSV+g9K+lU=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9JeUk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 3280,
- "top": -160,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqSV+g9L0Co=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9JeUk="
- },
- "font": "Arial;13;1",
- "left": 2165,
- "top": 263,
- "width": 119.2216796875,
- "height": 13,
- "text": "SecretKeySpec LIB"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqSV+g9MR+c=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9JeUk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 3280,
- "top": -160,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqSV+g9N9jo=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9JeUk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 3280,
- "top": -160,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 2160,
- "top": 256,
- "width": 129.2216796875,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjqSV+g9K+lU="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjqSV+g9L0Co="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjqSV+g9MR+c="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjqSV+g9N9jo="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjqSV+g9Ofl4=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9IUVE="
- },
- "model": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "font": "Arial;13;0",
- "left": 2160,
- "top": 281,
- "width": 129.2216796875,
- "height": 10
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjqSV+g9P6Pc=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9IUVE="
- },
- "model": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "font": "Arial;13;0",
- "left": 2160,
- "top": 291,
- "width": 129.2216796875,
- "height": 10
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjqSV+g9Q8nc=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9IUVE="
- },
- "model": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1640,
- "top": -80,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjqSV+g9RurA=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+g9IUVE="
- },
- "model": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1640,
- "top": -80,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 2160,
- "top": 256,
- "width": 129.2216796875,
- "height": 45,
- "nameCompartment": {
- "$ref": "AAAAAAFnjqSV+g9JeUk="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjqSV+g9Ofl4="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjqSV+g9P6Pc="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjqSV+g9Q8nc="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjqSV+g9RurA="
- }
- },
- {
- "_type": "UMLDependencyView",
- "_id": "AAAAAAFnjqjKUQ/iFBY=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjqjKUQ/gIMw="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjqjKUQ/j4vE=",
- "_parent": {
- "$ref": "AAAAAAFnjqjKUQ/iFBY="
- },
- "model": {
- "$ref": "AAAAAAFnjqjKUQ/gIMw="
- },
- "font": "Arial;13;0",
- "left": 1978,
- "top": 150,
- "width": 87.79443359375,
- "height": 13,
- "alpha": -4.41389025836879,
- "distance": 31.240998703626616,
- "hostEdge": {
- "$ref": "AAAAAAFnjqjKUQ/iFBY="
- },
- "edgePosition": 1,
- "text": "+MakeAESKey"
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjqjKUQ/kBkQ=",
- "_parent": {
- "$ref": "AAAAAAFnjqjKUQ/iFBY="
- },
- "model": {
- "$ref": "AAAAAAFnjqjKUQ/gIMw="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 2030,
- "top": 154,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjqjKUQ/iFBY="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjqjKUQ/lIxE=",
- "_parent": {
- "$ref": "AAAAAAFnjqjKUQ/iFBY="
- },
- "model": {
- "$ref": "AAAAAAFnjqjKUQ/gIMw="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1985,
- "top": 195,
- "width": 53.69482421875,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjqjKUQ/iFBY="
- },
- "edgePosition": 1
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjqSV+g9IUVE="
- },
- "tail": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "lineStyle": 1,
- "points": "1865:121;2171:255",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjqjKUQ/j4vE="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjqjKUQ/kBkQ="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjqjKUQ/lIxE="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjqu1tRAFND0=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjqu1tRAG0yA=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAFND0="
- },
- "model": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqu1tRAHUFU=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAG0yA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2752,
- "top": 384,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqu1tRAI52M=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAG0yA="
- },
- "font": "Arial;13;1",
- "left": 2165,
- "top": 327,
- "width": 111,
- "height": 13,
- "text": "Cipher LIB"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqu1tRAJ/4o=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAG0yA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2752,
- "top": 384,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjqu1tRAKutM=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAG0yA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2752,
- "top": 384,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 2160,
- "top": 320,
- "width": 121,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjqu1tRAHUFU="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjqu1tRAI52M="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjqu1tRAJ/4o="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjqu1tRAKutM="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjqu1tRALlGA=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAFND0="
- },
- "model": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- },
- "font": "Arial;13;0",
- "left": 2160,
- "top": 345,
- "width": 121,
- "height": 10
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjqu1tRAMQDY=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAFND0="
- },
- "model": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- },
- "font": "Arial;13;0",
- "left": 2160,
- "top": 355,
- "width": 121,
- "height": 10
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjqu1tRANiZk=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAFND0="
- },
- "model": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1376,
- "top": 192,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjqu1tRAOnOE=",
- "_parent": {
- "$ref": "AAAAAAFnjqu1tRAFND0="
- },
- "model": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1376,
- "top": 192,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 2160,
- "top": 320,
- "width": 121,
- "height": 45,
- "nameCompartment": {
- "$ref": "AAAAAAFnjqu1tRAG0yA="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjqu1tRALlGA="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjqu1tRAMQDY="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjqu1tRANiZk="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjqu1tRAOnOE="
- }
- },
- {
- "_type": "UMLDependencyView",
- "_id": "AAAAAAFnjqxjphA4vbA=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjqxjphA2cic="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjqxjphA5t/0=",
- "_parent": {
- "$ref": "AAAAAAFnjqxjphA4vbA="
- },
- "model": {
- "$ref": "AAAAAAFnjqxjphA2cic="
- },
- "font": "Arial;13;0",
- "left": 1987,
- "top": 201,
- "width": 65.39990234375,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjqxjphA4vbA="
- },
- "edgePosition": 1,
- "text": "+CipherSet"
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjqxjphA6yHQ=",
- "_parent": {
- "$ref": "AAAAAAFnjqxjphA4vbA="
- },
- "model": {
- "$ref": "AAAAAAFnjqxjphA2cic="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 2027,
- "top": 188,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjqxjphA4vbA="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjqxjphA7fWQ=",
- "_parent": {
- "$ref": "AAAAAAFnjqxjphA4vbA="
- },
- "model": {
- "$ref": "AAAAAAFnjqxjphA2cic="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2004,
- "top": 226,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjqxjphA4vbA="
- },
- "edgePosition": 1
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjqu1tRAFND0="
- },
- "tail": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "lineStyle": 1,
- "points": "1844:121;2181:319",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjqxjphA5t/0="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjqxjphA6yHQ="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjqxjphA7fWQ="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjrFoGRBjX1I=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjrFoGRBkUv8=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "model": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjrFoGRBlryE=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBkUv8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 112,
- "top": -496,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjrFoGRBmGCc=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBkUv8="
- },
- "font": "Arial;13;1",
- "left": 517,
- "top": 335,
- "width": 301.11376953125,
- "height": 13,
- "text": "UI _ ENCODE"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjrFoGRBnR9g=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBkUv8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 112,
- "top": -496,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjrFoGRBohSc=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBkUv8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 112,
- "top": -496,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 512,
- "top": 328,
- "width": 311.11376953125,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjrFoGRBlryE="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjrFoGRBmGCc="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjrFoGRBnR9g="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjrFoGRBohSc="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjrFoGRBpD0E=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "model": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjrx6UBCSL5Y=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "model": {
- "$ref": "AAAAAAFnjrx6JhCPbs0="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 358,
- "width": 301.11376953125,
- "height": 13,
- "underline": true,
- "text": "-SELECT_PICTURE: String = 100",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjryr3RCZPHs=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "model": {
- "$ref": "AAAAAAFnjryrrhCW5Ew="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 373,
- "width": 301.11376953125,
- "height": 13,
- "underline": true,
- "text": "-TAG: String = Encode Class",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjryy7BCg+5g=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "model": {
- "$ref": "AAAAAAFnjryywxCdAfg="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 388,
- "width": 301.11376953125,
- "height": 13,
- "text": "-Filepath: Uri",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjry2EBCnWS8=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "model": {
- "$ref": "AAAAAAFnjry14RCkcps="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 403,
- "width": 301.11376953125,
- "height": 13,
- "text": "-original_image: Bitmap",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjry7GBCu99g=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "model": {
- "$ref": "AAAAAAFnjry65hCrjeU="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 418,
- "width": 301.11376953125,
- "height": 13,
- "text": "-imageSteganography, result: ImageSteganography",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjrzBaRC1Db8=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "model": {
- "$ref": "AAAAAAFnjrzBPBCyXM0="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 433,
- "width": 301.11376953125,
- "height": 13,
- "text": "+save: ProgressDialog",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 512,
- "top": 353,
- "width": 311.11376953125,
- "height": 98
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjrFoGRBqF2k=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "model": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjshfkBJi2FU=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "model": {
- "$ref": "AAAAAAFnjshfYhJf+3Y="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 456,
- "width": 301.11376953125,
- "height": 13,
- "text": "+checkAndRequestPermissions()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjsldYhLIMS8=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "model": {
- "$ref": "AAAAAAFnjsldOxLFBQU="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 471,
- "width": 301.11376953125,
- "height": 13,
- "text": "+OnPressENCODE()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjsljNxLn1ig=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "model": {
- "$ref": "AAAAAAFnjsljDRLkMJU="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 486,
- "width": 301.11376953125,
- "height": 13,
- "text": "+OnPressDECODE()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjvPNzYIhwI0=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "model": {
- "$ref": "AAAAAAFnjvPNpIIeYW0="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 501,
- "width": 301.11376953125,
- "height": 13,
- "text": "+OnPressSAVEIMAGE()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjvS12oR1toM=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "model": {
- "$ref": "AAAAAAFnjvS1sYRybRs="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 516,
- "width": 301.11376953125,
- "height": 13,
- "text": "+saveToInternalStorage(bitmapImage, name)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjvXXYIdO35k=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "model": {
- "$ref": "AAAAAAFnjvXXN4dL7gk="
- },
- "font": "Arial;13;0",
- "left": 517,
- "top": 531,
- "width": 301.11376953125,
- "height": 13,
- "text": "+onActivityResult()",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 512,
- "top": 451,
- "width": 311.11376953125,
- "height": 98
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjrFoGRBr7yc=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "model": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 56,
- "top": -248,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjrFoGRBsw/U=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "model": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 56,
- "top": -248,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 512,
- "top": 328,
- "width": 311.11376953125,
- "height": 221,
- "nameCompartment": {
- "$ref": "AAAAAAFnjrFoGRBkUv8="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjrFoGRBpD0E="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjrFoGRBqF2k="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjrFoGRBr7yc="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjrFoGRBsw/U="
- }
- },
- {
- "_type": "UMLTextView",
- "_id": "AAAAAAFnjr8JIRDPb2s=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "font": "Arial;13;0",
- "width": 60,
- "height": 15
- },
- {
- "_type": "UMLTextView",
- "_id": "AAAAAAFnjr8T0xDSzIM=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "font": "Arial;20;0",
- "left": 2192,
- "top": 208,
- "width": 83.369140625,
- "height": 32,
- "text": "External"
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjsLb2BD4t1Y=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD0dwk="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2BD5Nxc=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD0dwk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 935,
- "top": 490,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2BD6fkc=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD0dwk="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 939,
- "top": 476,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2BD7ess=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD0dwk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 926,
- "top": 519,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2BD8v4o=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD1cp4="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 852,
- "top": 467,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2BD999g=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD1cp4="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 857,
- "top": 455,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2RD+Mys=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD1cp4="
- },
- "font": "Arial;13;0",
- "left": 830,
- "top": 492,
- "width": 21.68359375,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "edgePosition": 2,
- "text": "1"
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2RD/WLU=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD2Uqs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1017,
- "top": 513,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2REA5rE=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD2Uqs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1019,
- "top": 500,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjsLb2REBW4w=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD2Uqs="
- },
- "font": "Arial;13;0",
- "left": 1005,
- "top": 541,
- "width": 19.5126953125,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "text": "1..*"
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjsLb2RECDlA=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD1cp4="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjsLb2REDmXQ=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb2BD4t1Y="
- },
- "model": {
- "$ref": "AAAAAAFnjsLb1xD2Uqs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "tail": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "lineStyle": 1,
- "points": "823:481;1039:541",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjsLb2BD5Nxc="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjsLb2BD6fkc="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjsLb2BD7ess="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjsLb2BD8v4o="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjsLb2BD999g="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjsLb2RD+Mys="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjsLb2RD/WLU="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjsLb2REA5rE="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjsLb2REBW4w="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjsLb2RECDlA="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjsLb2REDmXQ="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjsp5xhTszx0=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjsp5xhTtnCs=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "model": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjsp5xhTuVrY=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTtnCs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 528,
- "top": -944,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjsp5xhTv5WQ=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTtnCs="
- },
- "font": "Arial;13;1",
- "left": 1541,
- "top": 311,
- "width": 386.04541015625,
- "height": 13,
- "text": "TextEncoding AsyncTask"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjsp5xxTw0JY=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTtnCs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 528,
- "top": -944,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjsp5xxTxvkE=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTtnCs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 528,
- "top": -944,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 1536,
- "top": 304,
- "width": 396.04541015625,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjsp5xhTuVrY="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjsp5xhTv5WQ="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjsp5xxTw0JY="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjsp5xxTxvkE="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjsp5xxTyL8c=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "model": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtCZsBmlxS8=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTyL8c="
- },
- "model": {
- "$ref": "AAAAAAFnjtCZhBmf+vA="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 334,
- "width": 386.04541015625,
- "height": 13,
- "text": "+activity: Activity",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtEaYBnev+g=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTyL8c="
- },
- "model": {
- "$ref": "AAAAAAFnjtEaMhnY6Vg="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 349,
- "width": 386.04541015625,
- "height": 13,
- "text": "+maximumProgress: int",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtF+sRoohPQ=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTyL8c="
- },
- "model": {
- "$ref": "AAAAAAFnjtF+hxoisLU="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 364,
- "width": 386.04541015625,
- "height": 13,
- "text": "+progressdialog: ProgressDialog",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtJAwhukG0M=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTyL8c="
- },
- "model": {
- "$ref": "AAAAAAFnjtJAkRueTAc="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 379,
- "width": 386.04541015625,
- "height": 13,
- "text": "+result: ImageSteganography",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtPJ3x2L74E=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTyL8c="
- },
- "model": {
- "$ref": "AAAAAAFnjtPJtx2FMhQ="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 394,
- "width": 386.04541015625,
- "height": 13,
- "text": "+ callbackInterface: TextEncodingCallback",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1536,
- "top": 329,
- "width": 396.04541015625,
- "height": 83
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjsp5xxTzIoc=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "model": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjtQjdB3/RmE=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTzIoc="
- },
- "model": {
- "$ref": "AAAAAAFnjtQjTB35cEM="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 417,
- "width": 386.04541015625,
- "height": 13,
- "text": "+TextExcoding(TextEncodingCallback, callbackInterface)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjtQs8R42pGA=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTzIoc="
- },
- "model": {
- "$ref": "AAAAAAFnjtQsvx4wQuU="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 432,
- "width": 386.04541015625,
- "height": 13,
- "text": "+onPreExecute()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjtQykx5tnD8=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTzIoc="
- },
- "model": {
- "$ref": "AAAAAAFnjtQyYh5nG+A="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 447,
- "width": 386.04541015625,
- "height": 13,
- "text": "+onPostExecute(textStegnography: ImageSteganography)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjtYzFiCPHJI=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTzIoc="
- },
- "model": {
- "$ref": "AAAAAAFnjtYy6SCHEy4="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 462,
- "width": 386.04541015625,
- "height": 13,
- "text": "+onProgressUpdate(values: Interger...)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjtcY9yF6fOI=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xxTzIoc="
- },
- "model": {
- "$ref": "AAAAAAFnjtcYwSFyY8A="
- },
- "font": "Arial;13;0",
- "left": 1541,
- "top": 477,
- "width": 386.04541015625,
- "height": 13,
- "text": "+doInBackground(imageSteganographies: ImageSteganography...)",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1536,
- "top": 412,
- "width": 396.04541015625,
- "height": 83
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjsp5xxT0tYM=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "model": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 264,
- "top": -472,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjsp5xxT1O+4=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "model": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 264,
- "top": -472,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 1536,
- "top": 304,
- "width": 396.04541015625,
- "height": 191,
- "nameCompartment": {
- "$ref": "AAAAAAFnjsp5xhTtnCs="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjsp5xxTyL8c="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjsp5xxTzIoc="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjsp5xxT0tYM="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjsp5xxT1O+4="
- }
- },
- {
- "_type": "UMLNoteView",
- "_id": "AAAAAAFnjs2nYBc9Gb8=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "font": "Arial;13;0",
- "left": 928,
- "top": 696,
- "width": 77.82080078125,
- "height": 77,
- "text": "imgsteg shorthand for the class here"
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjtlUfiQZC9A=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjtlUfiQaf58=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "model": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjtlUfiQbEaU=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQaf58="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1136,
- "top": -544,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjtlUfiQcbL0=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQaf58="
- },
- "font": "Arial;13;1",
- "left": 1573,
- "top": 863,
- "width": 1013.06689453125,
- "height": 13,
- "text": "EncodeDecode"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjtlUfiQdTV8=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQaf58="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1136,
- "top": -544,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjtlUfiQeyvE=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQaf58="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1136,
- "top": -544,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 1568,
- "top": 856,
- "width": 1023.06689453125,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjtlUfiQbEaU="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjtlUfiQcbL0="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjtlUfiQdTV8="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjtlUfiQeyvE="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjtlUfiQfupQ=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "model": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtrBLiSkofk=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "model": {
- "$ref": "AAAAAAFnjtrBACSboao="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 886,
- "width": 1013.06689453125,
- "height": 13,
- "underline": true,
- "text": "-TAG = EncodeDecode.class.getName()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtrSFSTb40k=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "model": {
- "$ref": "AAAAAAFnjtrR3iTSI4o="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 901,
- "width": 1013.06689453125,
- "height": 13,
- "text": "-binary: int[] = {16, 8, 0};",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtrZUSUSY6c=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "model": {
- "$ref": "AAAAAAFnjtrZHSUJL48="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 916,
- "width": 1013.06689453125,
- "height": 13,
- "text": "-toShift: int[] = {6, 4, 2, 0};",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtre8SVJTnE=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "model": {
- "$ref": "AAAAAAFnjtrewCVAbJ4="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 931,
- "width": 1013.06689453125,
- "height": 13,
- "text": "-andByte: byte[] = {(byte) 0xC0, 0x30, 0x0C, 0x03};",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtrk9iWAhV0=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "model": {
- "$ref": "AAAAAAFnjtrkxyV3kiQ="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 946,
- "width": 1013.06689453125,
- "height": 13,
- "text": "-END_MESSAGE_COSTANT: String = \"#!@\"",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjtrrTSW3+iA=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "model": {
- "$ref": "AAAAAAFnjtrrGiWuI+c="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 961,
- "width": 1013.06689453125,
- "height": 13,
- "text": "-START_MESSAGE_COSTANT: String = \"@!#\"",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1568,
- "top": 881,
- "width": 1023.06689453125,
- "height": 98
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjtlUfyQgB1Q=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "model": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjt3pQCnrp40=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfyQgB1Q="
- },
- "model": {
- "$ref": "AAAAAAFnjt3pDiniTF8="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 984,
- "width": 1013.06689453125,
- "height": 91,
- "autoResize": true,
- "text": "-Byte[] EncodeMessage(integer_pixel_array: int[], image_columns: int, image_rows: int, messageEncodingStatus: MessageEncodingStatus, progressHandler: ProgressHandler)",
- "horizontalAlignment": 0,
- "wordWrap": true
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuGz0C66V8o=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfyQgB1Q="
- },
- "model": {
- "$ref": "AAAAAAFnjuGzoS6xwZ8="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 1077,
- "width": 1013.06689453125,
- "height": 13,
- "text": "+List encodeMessage(splitted_images: List, encrypted_message: String , progressHandler: ProgressHandler)",
- "horizontalAlignment": 0,
- "wordWrap": true
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuTUEzz8V1A=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfyQgB1Q="
- },
- "model": {
- "$ref": "AAAAAAFnjuTT4jzttUs="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 1092,
- "width": 1013.06689453125,
- "height": 13,
- "text": "+String dencodeMessage(encodedImages: List)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuTeLj1URbE=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfyQgB1Q="
- },
- "model": {
- "$ref": "AAAAAAFnjuTd+T1BYT8="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 1107,
- "width": 1013.06689453125,
- "height": 13,
- "underline": true,
- "text": "-void decodeMessage(byte_pixel_array: byte[], image_columns: int, image_rows: int, messagedecodingStatus: MessagedecodingStatus)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjueFZz9GkUE=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfyQgB1Q="
- },
- "model": {
- "$ref": "AAAAAAFnjueFOT89wKU="
- },
- "font": "Arial;13;0",
- "left": 1573,
- "top": 1122,
- "width": 1013.06689453125,
- "height": 13,
- "underline": true,
- "text": "+int numberOfPixelForMessage(message: int)",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1568,
- "top": 979,
- "width": 1023.06689453125,
- "height": 161
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjtlUfyQh6ls=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "model": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 568,
- "top": -272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjtlUfyQiU0c=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "model": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 568,
- "top": -272,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 1568,
- "top": 856,
- "width": 1023.06689453125,
- "height": 284,
- "nameCompartment": {
- "$ref": "AAAAAAFnjtlUfiQaf58="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjtlUfiQfupQ="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjtlUfyQgB1Q="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjtlUfyQh6ls="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjtlUfyQiU0c="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjug21kDHYio=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjug21kDIXcQ=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDHYio="
- },
- "model": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjug21kDJj0k=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDIXcQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1808,
- "top": -1232,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjug21kDKZ0U=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDIXcQ="
- },
- "font": "Arial;13;1",
- "left": 2445,
- "top": 783,
- "width": 160.77978515625,
- "height": 13,
- "text": "MessageDecodingStatus"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjug21kDLvKA=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDIXcQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1808,
- "top": -1232,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjug21kDMiwE=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDIXcQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1808,
- "top": -1232,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 2440,
- "top": 776,
- "width": 170.77978515625,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjug21kDJj0k="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjug21kDKZ0U="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjug21kDLvKA="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjug21kDMiwE="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjug21kDNLX0=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDHYio="
- },
- "model": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjujXH0GPsDA=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDNLX0="
- },
- "model": {
- "$ref": "AAAAAAFnjujW6EGGgsc="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 806,
- "width": 160.77978515625,
- "height": 13,
- "text": "+message: String",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjujd+kHGo8A=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDNLX0="
- },
- "model": {
- "$ref": "AAAAAAFnjujdt0G98Is="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 821,
- "width": 160.77978515625,
- "height": 13,
- "text": "+ended: boolean",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 2440,
- "top": 801,
- "width": 170.77978515625,
- "height": 38
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjug21kDO84g=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDHYio="
- },
- "model": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuj0iEH8vWw=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDO84g="
- },
- "model": {
- "$ref": "AAAAAAFnjuj0VEHz21Y="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 844,
- "width": 160.77978515625,
- "height": 13,
- "text": "+MessageDecodingStatus()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjukkRkJMNJA=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDO84g="
- },
- "model": {
- "$ref": "AAAAAAFnjukkDEJDF4g="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 859,
- "width": 160.77978515625,
- "height": 13,
- "text": "+isEnded()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuk2j0KDftc=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDO84g="
- },
- "model": {
- "$ref": "AAAAAAFnjuk2UUJ6A2g="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 874,
- "width": 160.77978515625,
- "height": 13,
- "text": "+setEnded()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuk6bkK64JA=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDO84g="
- },
- "model": {
- "$ref": "AAAAAAFnjuk6LUKxmJ8="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 889,
- "width": 160.77978515625,
- "height": 13,
- "text": "+ getMessage()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuk+EELx/Pc=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDO84g="
- },
- "model": {
- "$ref": "AAAAAAFnjuk90ULorkM="
- },
- "font": "Arial;13;0",
- "left": 2445,
- "top": 904,
- "width": 160.77978515625,
- "height": 13,
- "text": "+setMessage(message)",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 2440,
- "top": 839,
- "width": 170.77978515625,
- "height": 83
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjug21kDP8ZE=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDHYio="
- },
- "model": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 904,
- "top": -616,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjug21kDQz8E=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDHYio="
- },
- "model": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 904,
- "top": -616,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 2440,
- "top": 776,
- "width": 170.77978515625,
- "height": 146,
- "nameCompartment": {
- "$ref": "AAAAAAFnjug21kDIXcQ="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjug21kDNLX0="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjug21kDO84g="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjug21kDP8ZE="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjug21kDQz8E="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjupK6kVLElA=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjupK60VM4HM=",
- "_parent": {
- "$ref": "AAAAAAFnjupK6kVLElA="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjupK60VNfm4=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VM4HM="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1932,
- "top": -2206,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjupK60VOJYs=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VM4HM="
- },
- "font": "Arial;13;1",
- "left": 2325,
- "top": 471,
- "width": 295.22314453125,
- "height": 13,
- "text": "MessageEncodingStatus"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjupK60VP68Y=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VM4HM="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1932,
- "top": -2206,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjupK60VQwds=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VM4HM="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1932,
- "top": -2206,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 2320,
- "top": 464,
- "width": 305.22314453125,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjupK60VNfm4="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjupK60VOJYs="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjupK60VP68Y="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjupK60VQwds="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjupK60VRC5g=",
- "_parent": {
- "$ref": "AAAAAAFnjupK6kVLElA="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjupLJEV3Ess=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VRC5g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUyIqk="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 494,
- "width": 295.22314453125,
- "height": 13,
- "text": "+messageEncoded: boolean",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjupLJEV62js=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VRC5g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUzoEw="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 509,
- "width": 295.22314453125,
- "height": 13,
- "text": "+currentMessageIndex: int",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnju769lIEr0w=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VRC5g="
- },
- "model": {
- "$ref": "AAAAAAFnju76vlH7OoU="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 524,
- "width": 295.22314453125,
- "height": 13,
- "text": "+byteArrayMessage: byte[]",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnju8yalLksQc=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VRC5g="
- },
- "model": {
- "$ref": "AAAAAAFnju8yNVLbOwU="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 539,
- "width": 295.22314453125,
- "height": 13,
- "text": "+message: String ",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 2320,
- "top": 489,
- "width": 305.22314453125,
- "height": 68
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjupK60VSI2g=",
- "_parent": {
- "$ref": "AAAAAAFnjupK6kVLElA="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjupLJEV9iWw=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEU0tZI="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 562,
- "width": 295.22314453125,
- "height": 13,
- "text": "+incrementMessageIndex()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjupLJUWADng=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEU12YQ="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 577,
- "width": 295.22314453125,
- "height": 13,
- "text": "+getMessage()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjupLJUWDzME=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEU2O5I="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 592,
- "width": 295.22314453125,
- "height": 13,
- "text": "+setMessage(message)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjupLJUWGavI=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEU3pds="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 607,
- "width": 295.22314453125,
- "height": 13,
- "text": "+isMessageEncoded()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjupLJUWJh6k=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEU4Yn4="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 622,
- "width": 295.22314453125,
- "height": 13,
- "text": "+setMessageEncoded(messageEncoded: boolean)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuv3WUfaQtU=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuv3F0fRkHI="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 637,
- "width": 295.22314453125,
- "height": 13,
- "text": "+getCurrentMessageIndex()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuv9I0gRyZ4=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuv84UgIEi4="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 652,
- "width": 295.22314453125,
- "height": 13,
- "text": "+setCurrentMessageIndex(currentMessageIndex)",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuwCHEhI3xo=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuwB3kg/srI="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 667,
- "width": 295.22314453125,
- "height": 13,
- "text": "+ byte[] getByteArrayMessage()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjuwGD0h/vWM=",
- "_parent": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "model": {
- "$ref": "AAAAAAFnjuwF2Eh2OZA="
- },
- "font": "Arial;13;0",
- "left": 2325,
- "top": 682,
- "width": 295.22314453125,
- "height": 13,
- "text": "+void setByteArrayMessage()",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 2320,
- "top": 557,
- "width": 305.22314453125,
- "height": 143
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjupK60VTrig=",
- "_parent": {
- "$ref": "AAAAAAFnjupK6kVLElA="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 966,
- "top": -1103,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjupK60VUpvc=",
- "_parent": {
- "$ref": "AAAAAAFnjupK6kVLElA="
- },
- "model": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 966,
- "top": -1103,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 2320,
- "top": 464,
- "width": 305.22314453125,
- "height": 236,
- "nameCompartment": {
- "$ref": "AAAAAAFnjupK60VM4HM="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjupK60VRC5g="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjupK60VSI2g="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjupK60VTrig="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjupK60VUpvc="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnju15R0sV9u8=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksRacw="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0sWGy4=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksRacw="
- },
- "font": "Arial;13;0",
- "left": 2234,
- "top": 944,
- "width": 58.169921875,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "edgePosition": 1,
- "text": "+subclass"
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0sX4zA=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksRacw="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 2268,
- "top": 958,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0sYKnw=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksRacw="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2254,
- "top": 915,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0sZ2MI=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksSN4Y="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2419,
- "top": 892,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0saFug=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksSN4Y="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2421,
- "top": 905,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0sb1Yk=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksSN4Y="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2414,
- "top": 865,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0scOac=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksT0VU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2108,
- "top": 996,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0sdbt8=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksT0VU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2114,
- "top": 1008,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju15R0seb9A=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksT0VU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2095,
- "top": 972,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnju15R0sf6pw=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksSN4Y="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 520,
- "top": -1616,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnju15R0sg7Rs=",
- "_parent": {
- "$ref": "AAAAAAFnju15R0sV9u8="
- },
- "model": {
- "$ref": "AAAAAAFnju15RksT0VU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 520,
- "top": -1616,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "tail": {
- "$ref": "AAAAAAFnjug21kDHYio="
- },
- "lineStyle": 1,
- "points": "2439:876;2079:997",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnju15R0sWGy4="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnju15R0sX4zA="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnju15R0sYKnw="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnju15R0sZ2MI="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnju15R0saFug="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnju15R0sb1Yk="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnju15R0scOac="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnju15R0sdbt8="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnju15R0seb9A="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnju15R0sf6pw="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnju15R0sg7Rs="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnju27dUu2W88=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuynDA="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu3V6A=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuynDA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2296,
- "top": 781,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu4BPQ=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuynDA="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 2307,
- "top": 791,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu5FeA=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuynDA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2275,
- "top": 760,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu6ZTE=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuzI4Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2353,
- "top": 723,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu7HwQ=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuzI4Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2361,
- "top": 733,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu8MGM=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuzI4Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2336,
- "top": 701,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu9dC0=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUu0GAY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2241,
- "top": 840,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu+nFQ=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUu0GAY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2252,
- "top": 847,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnju27dUu/X3g=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUu0GAY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2218,
- "top": 824,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnju27dUu2W88="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnju27dkvASFk=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUuzI4Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 448,
- "top": -1680,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnju27dkvBTLU=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUu2W88="
- },
- "model": {
- "$ref": "AAAAAAFnju27dUu0GAY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 448,
- "top": -1680,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "tail": {
- "$ref": "AAAAAAFnjupK6kVLElA="
- },
- "lineStyle": 1,
- "points": "2360:700;2213:855",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnju27dUu3V6A="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnju27dUu4BPQ="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnju27dUu5FeA="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnju27dUu6ZTE="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnju27dUu7HwQ="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnju27dUu8MGM="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnju27dUu9dC0="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnju27dUu+nFQ="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnju27dUu/X3g="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnju27dkvASFk="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnju27dkvBTLU="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjvDAuV73JWs=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV7zqL8="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV74vbU=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV7zqL8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1905,
- "top": 661,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV75xL4=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV7zqL8="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1918,
- "top": 653,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV765JA=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV7zqL8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1880,
- "top": 676,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV77V4U=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV70XNc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1814,
- "top": 503,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV78Wrw=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV70XNc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1827,
- "top": 499,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV792y4=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV70XNc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1789,
- "top": 513,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV7+ClI=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV71sRA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1996,
- "top": 819,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV7/y1I=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV71sRA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 2007,
- "top": 810,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvDAuV8AS+Q=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV71sRA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1975,
- "top": 836,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvDAuV8BWFU=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV70XNc="
- },
- "visible": false,
- "fillColor": "#a3e0ff",
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvDAuV8C9aw=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV73JWs="
- },
- "model": {
- "$ref": "AAAAAAFnjvDAuV71sRA="
- },
- "visible": false,
- "fillColor": "#a3e0ff",
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- }
- ],
- "fillColor": "#a3e0ff",
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "tail": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "lineStyle": 1,
- "points": "1789:495;1997:855",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjvDAuV74vbU="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvDAuV75xL4="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvDAuV765JA="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjvDAuV77V4U="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjvDAuV78Wrw="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjvDAuV792y4="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjvDAuV7+ClI="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjvDAuV7/y1I="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjvDAuV8AS+Q="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjvDAuV8BWFU="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjvDAuV8C9aw="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjvIVImdrpwQ=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjvIVImdsPhk=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdrpwQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvIVImdtUDI=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdsPhk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 432,
- "top": 160,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvIVImduzm0=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdsPhk="
- },
- "font": "Arial;13;1",
- "left": 1877,
- "top": 711,
- "width": 36.11181640625,
- "height": 13,
- "text": "Utility"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvIVImdvNZo=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdsPhk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 432,
- "top": 160,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvIVImdw80s=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdsPhk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 432,
- "top": 160,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 1872,
- "top": 704,
- "width": 46.11181640625,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvIVImdtUDI="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjvIVImduzm0="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjvIVImdvNZo="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvIVImdw80s="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjvIVImdxKXw=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdrpwQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- },
- "font": "Arial;13;0",
- "left": 1872,
- "top": 729,
- "width": 46.11181640625,
- "height": 10
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjvIVImdye2s=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdrpwQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- },
- "font": "Arial;13;0",
- "left": 1872,
- "top": 739,
- "width": 46.11181640625,
- "height": 10
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjvIVI2dzE4E=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdrpwQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 216,
- "top": 80,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjvIVI2d04Do=",
- "_parent": {
- "$ref": "AAAAAAFnjvIVImdrpwQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 216,
- "top": 80,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 1872,
- "top": 704,
- "width": 46.11181640625,
- "height": 57,
- "nameCompartment": {
- "$ref": "AAAAAAFnjvIVImdsPhk="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjvIVImdxKXw="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjvIVImdye2s="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjvIVI2dzE4E="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjvIVI2d04Do="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjvJESmnG7OQ=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnCQio="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJESmnHrx0=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnCQio="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1842,
- "top": 586,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJESmnI0/c=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnCQio="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1855,
- "top": 579,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJESmnJTcM=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnCQio="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1815,
- "top": 599,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJESmnKhh8=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnDn+Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1803,
- "top": 505,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJES2nL7WY=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnDn+Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1816,
- "top": 502,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJES2nMuJM=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnDn+Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1777,
- "top": 513,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJES2nNQR0=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnEmic="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1882,
- "top": 667,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJES2nOyyg=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnEmic="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1893,
- "top": 659,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvJES2nPxtY=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnEmic="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1859,
- "top": 682,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvJES2nQl2g=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnDn+Q="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 488,
- "top": 40,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvJES2nRZ+w=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnG7OQ="
- },
- "model": {
- "$ref": "AAAAAAFnjvJESmnEmic="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 488,
- "top": 40,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjvIVImdrpwQ="
- },
- "tail": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "lineStyle": 1,
- "points": "1779:495;1880:703",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjvJESmnHrx0="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvJESmnI0/c="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvJESmnJTcM="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjvJESmnKhh8="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjvJES2nL7WY="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjvJES2nMuJM="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjvJES2nNQR0="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjvJES2nOyyg="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjvJES2nPxtY="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjvJES2nQl2g="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjvJES2nRZ+w="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjvMkqXyqGxY=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHymdzs="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyr9hc=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHymdzs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1429,
- "top": 477,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXys3OU=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHymdzs="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1424,
- "top": 463,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXytVBY=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHymdzs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1438,
- "top": 506,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyupvE=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyn3Ss="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1352,
- "top": 503,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyve0o=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyn3Ss="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1350,
- "top": 490,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyw/JQ=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyn3Ss="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1357,
- "top": 531,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyxay0=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyocGo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1505,
- "top": 452,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyyFAU=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyocGo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1499,
- "top": 441,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvMkqXyzbo8=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyocGo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1518,
- "top": 477,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvMkqXy036Q=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyn3Ss="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvMkqXy1T10=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqXyqGxY="
- },
- "model": {
- "$ref": "AAAAAAFnjvMkqHyocGo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "tail": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "lineStyle": 1,
- "points": "1333:532;1535:465",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjvMkqXyr9hc="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvMkqXys3OU="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvMkqXytVBY="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjvMkqXyupvE="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjvMkqXyve0o="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjvMkqXyw/JQ="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjvMkqXyxay0="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjvMkqXyyFAU="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjvMkqXyzbo8="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjvMkqXy036Q="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjvMkqXy1T10="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjvNbWX3+RoI=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX36geQ="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX3/J1c=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX36geQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1178,
- "top": 398,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4A948=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX36geQ="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1177,
- "top": 383,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4BKQs=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX36geQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1179,
- "top": 427,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4CGYw=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX37JTU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 848,
- "top": 410,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4DfNc=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX37JTU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 850,
- "top": 396,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4EqVQ=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX37JTU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 845,
- "top": 437,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4F6zE=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX38ZTk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1508,
- "top": 385,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4G2j4=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX38ZTk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1505,
- "top": 372,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvNbWX4HTo8=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX38ZTk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1513,
- "top": 413,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvNbWX4I72A=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX37JTU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjvNbWX4JBBo=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX3+RoI="
- },
- "model": {
- "$ref": "AAAAAAFnjvNbWX38ZTk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjsp5xhTszx0="
- },
- "tail": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "lineStyle": 1,
- "points": "823:432;1535:406",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjvNbWX3/J1c="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvNbWX4A948="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvNbWX4BKQs="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjvNbWX4CGYw="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjvNbWX4DfNc="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjvNbWX4EqVQ="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjvNbWX4F6zE="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjvNbWX4G2j4="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjvNbWX4HTo8="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjvNbWX4I72A="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjvNbWX4JBBo="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjvggTpR7GTY=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjvggTpR8QkA=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR7GTY="
- },
- "model": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvggTpR9Ig4=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR8QkA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": -32,
- "top": -816,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvggTpR+Nbk=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR8QkA="
- },
- "font": "Arial;13;1",
- "left": 2109,
- "top": 407,
- "width": 130.75537109375,
- "height": 13,
- "text": "Android.Utils.Base64"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvggTpR/md8=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR8QkA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": -32,
- "top": -816,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvggTpSA1RE=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR8QkA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": -32,
- "top": -816,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 2104,
- "top": 400,
- "width": 140.75537109375,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvggTpR9Ig4="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjvggTpR+Nbk="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjvggTpR/md8="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvggTpSA1RE="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjvggTpSBoOo=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR7GTY="
- },
- "model": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- },
- "font": "Arial;13;0",
- "left": 2104,
- "top": 425,
- "width": 140.75537109375,
- "height": 10
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjvggTpSCgE8=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR7GTY="
- },
- "model": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- },
- "font": "Arial;13;0",
- "left": 2104,
- "top": 435,
- "width": 140.75537109375,
- "height": 10
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjvggTpSDhcM=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR7GTY="
- },
- "model": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": -16,
- "top": -408,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjvggTpSEiuQ=",
- "_parent": {
- "$ref": "AAAAAAFnjvggTpR7GTY="
- },
- "model": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": -16,
- "top": -408,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 2104,
- "top": 400,
- "width": 140.75537109375,
- "height": 45,
- "nameCompartment": {
- "$ref": "AAAAAAFnjvggTpR8QkA="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjvggTpSBoOo="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjvggTpSCgE8="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjvggTpSDhcM="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjvggTpSEiuQ="
- }
- },
- {
- "_type": "UMLDependencyView",
- "_id": "AAAAAAFnjvhqvJV98I8=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvhqvJV7i1E="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvhqvJV+Vzs=",
- "_parent": {
- "$ref": "AAAAAAFnjvhqvJV98I8="
- },
- "model": {
- "$ref": "AAAAAAFnjvhqvJV7i1E="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1994,
- "top": 242,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvhqvJV98I8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvhqvJV/QgM=",
- "_parent": {
- "$ref": "AAAAAAFnjvhqvJV98I8="
- },
- "model": {
- "$ref": "AAAAAAFnjvhqvJV7i1E="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 2004,
- "top": 231,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjvhqvJV98I8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjvhqvJWAiOw=",
- "_parent": {
- "$ref": "AAAAAAFnjvhqvJV98I8="
- },
- "model": {
- "$ref": "AAAAAAFnjvhqvJV7i1E="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1975,
- "top": 265,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjvhqvJV98I8="
- },
- "edgePosition": 1
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjvggTpR7GTY="
- },
- "tail": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "lineStyle": 1,
- "points": "1824:121;2146:399",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjvhqvJV+Vzs="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvhqvJV/QgM="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvhqvJWAiOw="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjvl596x0+34=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjvl596x1fVs=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "model": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvl596x2oo8=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x1fVs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 576,
- "top": -768,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvl596x3IUQ=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x1fVs="
- },
- "font": "Arial;13;1",
- "left": 1301,
- "top": 759,
- "width": 269.17236328125,
- "height": 13,
- "text": "TextDecoding AsyncTask"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvl596x4934=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x1fVs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 576,
- "top": -768,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjvl5+Kx5ik4=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x1fVs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 576,
- "top": -768,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 1296,
- "top": 752,
- "width": 279.17236328125,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjvl596x2oo8="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjvl596x3IUQ="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjvl596x4934="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjvl5+Kx5ik4="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjvl5+Kx6oJ8=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "model": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjvowW64fuUQ=",
- "_parent": {
- "$ref": "AAAAAAFnjvl5+Kx6oJ8="
- },
- "model": {
- "$ref": "AAAAAAFnjvowHK4EVoM="
- },
- "font": "Arial;13;0",
- "left": 1301,
- "top": 782,
- "width": 269.17236328125,
- "height": 13,
- "text": "+result: ImageSteganography ",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjvp3iK/vg/c=",
- "_parent": {
- "$ref": "AAAAAAFnjvl5+Kx6oJ8="
- },
- "model": {
- "$ref": "AAAAAAFnjvp3Ta/UwfQ="
- },
- "font": "Arial;13;0",
- "left": 1301,
- "top": 797,
- "width": 269.17236328125,
- "height": 13,
- "text": "+textDecodingCallback: TextDecodingCallback",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjvrDxrGn9iU=",
- "_parent": {
- "$ref": "AAAAAAFnjvl5+Kx6oJ8="
- },
- "model": {
- "$ref": "AAAAAAFnjvrDjbGMPtI="
- },
- "font": "Arial;13;0",
- "left": 1301,
- "top": 812,
- "width": 269.17236328125,
- "height": 13,
- "text": "+activity: Activity ",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 1296,
- "top": 777,
- "width": 279.17236328125,
- "height": 53
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjvl5+Kx74JM=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "model": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "font": "Arial;13;0",
- "left": 1296,
- "top": 830,
- "width": 279.17236328125,
- "height": 10
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjvl5+Kx8M+k=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "model": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 288,
- "top": -384,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjvl5+Kx9o3I=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "model": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 288,
- "top": -384,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 1296,
- "top": 752,
- "width": 279.17236328125,
- "height": 88,
- "nameCompartment": {
- "$ref": "AAAAAAFnjvl596x1fVs="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjvl5+Kx6oJ8="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjvl5+Kx74JM="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjvl5+Kx8M+k="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjvl5+Kx9o3I="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjv11neSnOac=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSjm3g="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSozy4=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSjm3g="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1367,
- "top": 711,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSpJZY=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSjm3g="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1377,
- "top": 700,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSqcjs=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSjm3g="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1348,
- "top": 734,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSrO5A=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSkbAU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1361,
- "top": 706,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSsGg0=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSkbAU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1371,
- "top": 697,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSt5UA=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSkbAU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1340,
- "top": 724,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSuQ9I=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSll9A="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1373,
- "top": 716,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSvl3s=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSll9A="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1380,
- "top": 705,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv11neSwx7w=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSll9A="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1359,
- "top": 740,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjv11neSnOac="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjv11neSxTdE=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSkbAU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjv11neSy1VE=",
- "_parent": {
- "$ref": "AAAAAAFnjv11neSnOac="
- },
- "model": {
- "$ref": "AAAAAAFnjv11nOSll9A="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "tail": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "lineStyle": 1,
- "points": "1332:707;1384:751",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjv11neSozy4="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjv11neSpJZY="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjv11neSqcjs="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjv11neSrO5A="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjv11neSsGg0="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjv11neSt5UA="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjv11neSuQ9I="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjv11neSvl3s="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjv11neSwx7w="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjv11neSxTdE="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjv11neSy1VE="
- }
- },
- {
- "_type": "UMLDependencyView",
- "_id": "AAAAAAFnjv9zlem30f4=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjv9zlem1ROw="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv9zlem4nOU=",
- "_parent": {
- "$ref": "AAAAAAFnjv9zlem30f4="
- },
- "model": {
- "$ref": "AAAAAAFnjv9zlem1ROw="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1525,
- "top": 271,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjv9zlem30f4="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv9zlem5nQY=",
- "_parent": {
- "$ref": "AAAAAAFnjv9zlem30f4="
- },
- "model": {
- "$ref": "AAAAAAFnjv9zlem1ROw="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1515,
- "top": 259,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjv9zlem30f4="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjv9zlem6cRQ=",
- "_parent": {
- "$ref": "AAAAAAFnjv9zlem30f4="
- },
- "model": {
- "$ref": "AAAAAAFnjv9zlem1ROw="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1544,
- "top": 294,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjv9zlem30f4="
- },
- "edgePosition": 1
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjp66Gg7qarI="
- },
- "tail": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "lineStyle": 1,
- "points": "1333:458;1737:121",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjv9zlem4nOU="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjv9zlem5nQY="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjv9zlem6cRQ="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjwB7R/OqL3o=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOm/8g="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7R/OrO6Q=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOm/8g="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1604,
- "top": 826,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7R/OspVk=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOm/8g="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1608,
- "top": 812,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOtSto=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOm/8g="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1595,
- "top": 855,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOuHB0=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOnQNo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1604,
- "top": 826,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOvReI=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOnQNo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1610,
- "top": 814,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOwU3E=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOnQNo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1591,
- "top": 851,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOxc9M=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOoSvY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1605,
- "top": 826,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOyFLM=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOoSvY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1607,
- "top": 813,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwB7SPOzDtU=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOoSvY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1601,
- "top": 854,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwB7SPO0ERY=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOnQNo="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwB7SPO1+Yk=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7R/OqL3o="
- },
- "model": {
- "$ref": "AAAAAAFnjwB7RvOoSvY="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 272,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjtlUfiQZC9A="
- },
- "tail": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "lineStyle": 1,
- "points": "1575:839;1626:855",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjwB7R/OrO6Q="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwB7R/OspVk="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwB7SPOtSto="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjwB7SPOuHB0="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjwB7SPOvReI="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjwB7SPOwU3E="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjwB7SPOxc9M="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjwB7SPOyFLM="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjwB7SPOzDtU="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjwB7SPO0ERY="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjwB7SPO1+Yk="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjwMf1RBJ4cA=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjwMf1RBKoCk=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwMf1RBLbdE=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBKoCk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 224,
- "top": -1198,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwMf1RBMLDA=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBKoCk="
- },
- "font": "Arial;13;1",
- "left": 485,
- "top": 647,
- "width": 331.3349609375,
- "height": 13,
- "text": "UI _ DECODE"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwMf1hBN/Qw=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBKoCk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 224,
- "top": -1198,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwMf1hBOl7o=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBKoCk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 224,
- "top": -1198,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 480,
- "top": 640,
- "width": 341.3349609375,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwMf1RBLbdE="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjwMf1RBMLDA="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjwMf1hBN/Qw="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwMf1hBOl7o="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjwMf1hBPPJU=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "subViews": [
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjwMgExDzkzY=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBPPJU="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/JZiA="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 670,
- "width": 331.3349609375,
- "height": 13,
- "underline": true,
- "text": "-SELECT_PICTURE: String = 100",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjwMgExD21xM=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBPPJU="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/Kvas="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 685,
- "width": 331.3349609375,
- "height": 13,
- "underline": true,
- "text": "-TAG: String = Decode Class",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLAttributeView",
- "_id": "AAAAAAFnjwMgExD/ClE=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBPPJU="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/NI5E="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 700,
- "width": 331.3349609375,
- "height": 13,
- "text": "-result: ImageSteganography",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 480,
- "top": 665,
- "width": 341.3349609375,
- "height": 53
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjwMf1hBQvws=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwMgFBEF9fM=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBQvws="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/PE8I="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 723,
- "width": 331.3349609375,
- "height": 13,
- "text": "+void ImageChooser()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwMgFBEIGnM=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBQvws="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/Ql7o="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 738,
- "width": 331.3349609375,
- "height": 13,
- "text": "+OnPressENCODE()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwMgFBELFX8=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBQvws="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bg/RQB8="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 753,
- "width": 331.3349609375,
- "height": 13,
- "text": "+OnPressDECODE()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwMgFBEOftI=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBQvws="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bg/SEdA="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 768,
- "width": 331.3349609375,
- "height": 13,
- "text": "+onCompleteTextEncoding(result: ImageSteganography )",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwMgFBEUke8=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBQvws="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bg/Wxzo="
- },
- "font": "Arial;13;0",
- "left": 485,
- "top": 783,
- "width": 331.3349609375,
- "height": 13,
- "text": "+onActivityResult()",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 480,
- "top": 718,
- "width": 341.3349609375,
- "height": 83
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjwMf1hBRB9M=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 112,
- "top": -599,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjwMf1hBScr4=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 112,
- "top": -599,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 480,
- "top": 640,
- "width": 341.3349609375,
- "height": 221,
- "nameCompartment": {
- "$ref": "AAAAAAFnjwMf1RBKoCk="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjwMf1hBPPJU="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjwMf1hBQvws="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjwMf1hBRB9M="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjwMf1hBScr4="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjwMf1hBTNhk=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/AQTQ="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1hBUIUM=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/AQTQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 925,
- "top": 640,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1hBVu/Y=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/AQTQ="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 921,
- "top": 626,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBWnKg=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/AQTQ="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 934,
- "top": 669,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBXekg=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/Bgz8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 841,
- "top": 667,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBYFHU=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/Bgz8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 839,
- "top": 654,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBZIyo=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/Bgz8="
- },
- "font": "Arial;13;0",
- "left": 842,
- "top": 695,
- "width": 7.22998046875,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "edgePosition": 2,
- "text": "1"
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBaFrI=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/CArc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1009,
- "top": 614,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBbhRQ=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/CArc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1003,
- "top": 602,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwMf1xBcLcc=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/CArc="
- },
- "font": "Arial;13;0",
- "left": 1013,
- "top": 639,
- "width": 19.5126953125,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "text": "1..*"
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwMf1xBdwuY=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/Bgz8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwMf1xBeAHs=",
- "_parent": {
- "$ref": "AAAAAAFnjwMf1hBTNhk="
- },
- "model": {
- "$ref": "AAAAAAFnjwL+bQ/CArc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjpeueQ5KROA="
- },
- "tail": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "lineStyle": 1,
- "points": "821:696;1039:627",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjwMf1hBUIUM="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwMf1hBVu/Y="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwMf1xBWnKg="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjwMf1xBXekg="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjwMf1xBYFHU="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjwMf1xBZIyo="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjwMf1xBaFrI="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjwMf1xBbhRQ="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjwMf1xBcLcc="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjwMf1xBdwuY="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjwMf1xBeAHs="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjwVLyB6qTC8=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6mapA="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6rgrU=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6mapA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1058,
- "top": 752,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6suRM=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6mapA="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 1059,
- "top": 737,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6t374=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6mapA="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1057,
- "top": 781,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6uZ6o=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6nOBk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 847,
- "top": 740,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6vbMY=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6nOBk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 850,
- "top": 727,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6wNok=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6nOBk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 841,
- "top": 767,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6xkq4=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLyB6oih8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1269,
- "top": 764,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6y1C4=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLyB6oih8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1268,
- "top": 751,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwVLyB6z6OI=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLyB6oih8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 1272,
- "top": 792,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwVLyB60Obk=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLxx6nOBk="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwVLyB61814=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLyB6qTC8="
- },
- "model": {
- "$ref": "AAAAAAFnjwVLyB6oih8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjvl596x0+34="
- },
- "tail": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "lineStyle": 1,
- "points": "821:760;1295:787",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjwVLyB6rgrU="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwVLyB6suRM="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwVLyB6t374="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjwVLyB6uZ6o="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjwVLyB6vbMY="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjwVLyB6wNok="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjwVLyB6xkq4="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjwVLyB6y1C4="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjwVLyB6z6OI="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjwVLyB60Obk="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjwVLyB61814="
- }
- },
- {
- "_type": "UMLClassView",
- "_id": "AAAAAAFnjwW04SJa+8Q=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "subViews": [
- {
- "_type": "UMLNameCompartmentView",
- "_id": "AAAAAAFnjwW04SJbtE0=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "model": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "subViews": [
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwW04SJcRlw=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJbtE0="
- },
- "visible": false,
- "font": "Arial;13;0",
- "top": -80,
- "height": 13
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwW04SJdvzk=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJbtE0="
- },
- "font": "Arial;13;1",
- "left": 269,
- "top": 519,
- "width": 111.6298828125,
- "height": 13,
- "text": "Main_UI"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwW04SJeE+k=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJbtE0="
- },
- "visible": false,
- "font": "Arial;13;0",
- "top": -80,
- "width": 80.9072265625,
- "height": 13,
- "text": "(from Model1)"
- },
- {
- "_type": "LabelView",
- "_id": "AAAAAAFnjwW04SJfvrk=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJbtE0="
- },
- "visible": false,
- "font": "Arial;13;0",
- "top": -80,
- "height": 13,
- "horizontalAlignment": 1
- }
- ],
- "font": "Arial;13;0",
- "left": 264,
- "top": 512,
- "width": 121.6298828125,
- "height": 25,
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwW04SJcRlw="
- },
- "nameLabel": {
- "$ref": "AAAAAAFnjwW04SJdvzk="
- },
- "namespaceLabel": {
- "$ref": "AAAAAAFnjwW04SJeE+k="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwW04SJfvrk="
- }
- },
- {
- "_type": "UMLAttributeCompartmentView",
- "_id": "AAAAAAFnjwW04SJgyX8=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "model": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "font": "Arial;13;0",
- "left": 264,
- "top": 537,
- "width": 121.6298828125,
- "height": 10
- },
- {
- "_type": "UMLOperationCompartmentView",
- "_id": "AAAAAAFnjwW04SJhzW8=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "model": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "subViews": [
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwXtFyS3JaI=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJhzW8="
- },
- "model": {
- "$ref": "AAAAAAFnjwXs3CST/UE="
- },
- "font": "Arial;13;0",
- "left": 269,
- "top": 552,
- "width": 111.6298828125,
- "height": 13,
- "text": "+OnPressEncode()",
- "horizontalAlignment": 0
- },
- {
- "_type": "UMLOperationView",
- "_id": "AAAAAAFnjwX4LCXFaMY=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJhzW8="
- },
- "model": {
- "$ref": "AAAAAAFnjwX38iWh2ms="
- },
- "font": "Arial;13;0",
- "left": 269,
- "top": 567,
- "width": 111.6298828125,
- "height": 13,
- "text": "+OnPressDecode()",
- "horizontalAlignment": 0
- }
- ],
- "font": "Arial;13;0",
- "left": 264,
- "top": 547,
- "width": 121.6298828125,
- "height": 38
- },
- {
- "_type": "UMLReceptionCompartmentView",
- "_id": "AAAAAAFnjwW04SJiwxA=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "model": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "top": -40,
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLTemplateParameterCompartmentView",
- "_id": "AAAAAAFnjwW04SJjq+w=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "model": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "visible": false,
- "font": "Arial;13;0",
- "top": -40,
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "containerChangeable": true,
- "left": 264,
- "top": 512,
- "width": 121.6298828125,
- "height": 73,
- "nameCompartment": {
- "$ref": "AAAAAAFnjwW04SJbtE0="
- },
- "attributeCompartment": {
- "$ref": "AAAAAAFnjwW04SJgyX8="
- },
- "operationCompartment": {
- "$ref": "AAAAAAFnjwW04SJhzW8="
- },
- "receptionCompartment": {
- "$ref": "AAAAAAFnjwW04SJiwxA="
- },
- "templateParameterCompartment": {
- "$ref": "AAAAAAFnjwW04SJjq+w="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjwZeqCjnF+E=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjjQ4g="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjoZog=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjjQ4g="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 443,
- "top": 487,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjp2Vc=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjjQ4g="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 438,
- "top": 473,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjqfbc=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjjQ4g="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 452,
- "top": 516,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjrOx4=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjkyYs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 406,
- "top": 499,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjspSw=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjkyYs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 404,
- "top": 486,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjtrLI=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjkyYs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 410,
- "top": 527,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjuo3g=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjlceU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 481,
- "top": 475,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjvetY=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjlceU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 475,
- "top": 463,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZeqCjw6aY=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjlceU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 494,
- "top": 500,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwZeqCjxhmQ=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjkyYs="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwZeqCjyNzE=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjnF+E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZeqCjlceU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjrFoGRBjX1I="
- },
- "tail": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "lineStyle": 1,
- "points": "386:528;511:488",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjwZeqCjoZog="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwZeqCjp2Vc="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwZeqCjqfbc="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjwZeqCjrOx4="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjwZeqCjspSw="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjwZeqCjtrLI="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjwZeqCjuo3g="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjwZeqCjvetY="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjwZeqCjw6aY="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjwZeqCjxhmQ="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjwZeqCjyNzE="
- }
- },
- {
- "_type": "UMLAssociationView",
- "_id": "AAAAAAFnjwZqainPw2E=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainLgbc="
- },
- "subViews": [
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainQCgI=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainLgbc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 438,
- "top": 595,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainRi/0=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainLgbc="
- },
- "visible": null,
- "font": "Arial;13;0",
- "left": 446,
- "top": 582,
- "height": 13,
- "alpha": 1.5707963267948966,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainSwXw=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainLgbc="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 423,
- "top": 620,
- "height": 13,
- "alpha": -1.5707963267948966,
- "distance": 15,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "edgePosition": 1
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainTo1E=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainMM7I="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 413,
- "top": 579,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainUW5Q=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainMM7I="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 422,
- "top": 569,
- "height": 13,
- "alpha": 0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainVzcg=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainMM7I="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 395,
- "top": 601,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "edgePosition": 2
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainW4W8=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainNcZU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 464,
- "top": 611,
- "height": 13,
- "alpha": -0.5235987755982988,
- "distance": 30,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainXQ8s=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainNcZU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 469,
- "top": 599,
- "height": 13,
- "alpha": -0.7853981633974483,
- "distance": 40,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- }
- },
- {
- "_type": "EdgeLabelView",
- "_id": "AAAAAAFnjwZqainYDzc=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainNcZU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "left": 454,
- "top": 637,
- "height": 13,
- "alpha": 0.5235987755982988,
- "distance": 25,
- "hostEdge": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- }
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwZqainZlNA=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainMM7I="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- },
- {
- "_type": "UMLQualifierCompartmentView",
- "_id": "AAAAAAFnjwZqainae/o=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainPw2E="
- },
- "model": {
- "$ref": "AAAAAAFnjwZqainNcZU="
- },
- "visible": false,
- "font": "Arial;13;0",
- "width": 10,
- "height": 10
- }
- ],
- "font": "Arial;13;0",
- "head": {
- "$ref": "AAAAAAFnjwMf1RBJ4cA="
- },
- "tail": {
- "$ref": "AAAAAAFnjwW04SJa+8Q="
- },
- "lineStyle": 1,
- "points": "384:585;479:644",
- "showVisibility": true,
- "nameLabel": {
- "$ref": "AAAAAAFnjwZqainQCgI="
- },
- "stereotypeLabel": {
- "$ref": "AAAAAAFnjwZqainRi/0="
- },
- "propertyLabel": {
- "$ref": "AAAAAAFnjwZqainSwXw="
- },
- "tailRoleNameLabel": {
- "$ref": "AAAAAAFnjwZqainTo1E="
- },
- "tailPropertyLabel": {
- "$ref": "AAAAAAFnjwZqainUW5Q="
- },
- "tailMultiplicityLabel": {
- "$ref": "AAAAAAFnjwZqainVzcg="
- },
- "headRoleNameLabel": {
- "$ref": "AAAAAAFnjwZqainW4W8="
- },
- "headPropertyLabel": {
- "$ref": "AAAAAAFnjwZqainXQ8s="
- },
- "headMultiplicityLabel": {
- "$ref": "AAAAAAFnjwZqainYDzc="
- },
- "tailQualifiersCompartment": {
- "$ref": "AAAAAAFnjwZqainZlNA="
- },
- "headQualifiersCompartment": {
- "$ref": "AAAAAAFnjwZqainae/o="
- }
- },
- {
- "_type": "UMLTextView",
- "_id": "AAAAAAFnjweLKUXzhZw=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2Fg5EewU="
- },
- "font": "Arial;20;0",
- "left": 360,
- "top": 224,
- "width": 488,
- "height": 88,
- "text": "UI THREAD"
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjpeueQ5Ig5Y=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "ImageSteganography",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvMkqHymdzs=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvMkqHyn3Ss=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqHymdzs="
- },
- "reference": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "navigable": false
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvMkqHyocGo=",
- "_parent": {
- "$ref": "AAAAAAFnjvMkqHymdzs="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjv11nOSjm3g=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjv11nOSkbAU=",
- "_parent": {
- "$ref": "AAAAAAFnjv11nOSjm3g="
- },
- "reference": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "navigable": false
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjv11nOSll9A=",
- "_parent": {
- "$ref": "AAAAAAFnjv11nOSjm3g="
- },
- "reference": {
- "$ref": "AAAAAAFnjvl596xybT4="
- }
- }
- },
- {
- "_type": "UMLDependency",
- "_id": "AAAAAAFnjv9zlem1ROw=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "source": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "target": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- }
- }
- ],
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpfiOg5xtDk=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Message",
- "type": "String"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpjxqA6Bza4=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Secret_Key",
- "type": "String"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpj2Iw6IYyA=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Encrypted_Message",
- "type": "String"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpkUIA6PuiY=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Image",
- "type": "Bitmap"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpkbmw6WD7Y=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Encoded_Image",
- "type": "Bitmap"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpkfNQ6dzA0=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Encrypted_Zip",
- "type": "Byte [ ]"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpkjEA6kgi8=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Decoded",
- "type": "Boolean"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpkl5w6rr/M=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "Encoded",
- "type": "Boolean"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjpko3A6yrEM=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "SecretKeyWrong",
- "type": "Boolean"
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjstUmxWB8yM=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "ImgSteg",
- "isStatic": true,
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjswprhXhRME=",
- "_parent": {
- "$ref": "AAAAAAFnjstUmxWB8yM="
- },
- "name": "message",
- "type": ""
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjsw+hxX2uAM=",
- "_parent": {
- "$ref": "AAAAAAFnjstUmxWB8yM="
- },
- "name": "secret_key",
- "type": ""
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjsxI8RYLVBA=",
- "_parent": {
- "$ref": "AAAAAAFnjstUmxWB8yM="
- },
- "name": "image",
- "type": ""
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjszkVBZ2JHA=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "ImgSteg",
- "isStatic": true,
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjszkVBZ4Gnc=",
- "_parent": {
- "$ref": "AAAAAAFnjszkVBZ2JHA="
- },
- "name": "secret_key",
- "type": ""
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjszkVBZ5pfE=",
- "_parent": {
- "$ref": "AAAAAAFnjszkVBZ2JHA="
- },
- "name": "image",
- "type": ""
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjpgMeg53qk8=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "EncryptMessage",
- "isStatic": true
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjpvaGQ7Mm1E=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "DecryptMessage",
- "isStatic": true
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjpvgEw7TAVo=",
- "_parent": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "name": "convertKeyTo128bit"
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjp66Gg7o+EA=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "Crypto",
- "ownedElements": [
- {
- "_type": "UMLDependency",
- "_id": "AAAAAAFnjqjKUQ/gIMw=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "name": "MakeAESKey",
- "source": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "target": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- }
- },
- {
- "_type": "UMLDependency",
- "_id": "AAAAAAFnjqxjphA2cic=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "name": "CipherSet",
- "source": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "target": {
- "$ref": "AAAAAAFnjqu1tBADvMA="
- }
- },
- {
- "_type": "UMLDependency",
- "_id": "AAAAAAFnjvhqvJV7i1E=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "source": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "target": {
- "$ref": "AAAAAAFnjvggTZR5l9s="
- }
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjqAH7Q8U3pg=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "name": "EncryptMessage",
- "stereotype": "",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjqGLwg8qktc=",
- "_parent": {
- "$ref": "AAAAAAFnjqAH7Q8U3pg="
- },
- "name": "Message",
- "type": "String"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjqHxuQ8vJCE=",
- "_parent": {
- "$ref": "AAAAAAFnjqAH7Q8U3pg="
- },
- "name": "Secret_Key",
- "type": "String"
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjqJ6yg84Zfc=",
- "_parent": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- },
- "name": "DecryptMessage",
- "stereotype": "",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjqJ6yg85SII=",
- "_parent": {
- "$ref": "AAAAAAFnjqJ6yg84Zfc="
- },
- "name": "EncryptMessage",
- "type": "String"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjqJ6yg86xTI=",
- "_parent": {
- "$ref": "AAAAAAFnjqJ6yg84Zfc="
- },
- "name": "Secret_Key",
- "type": "String"
- }
- ]
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjqSV+Q9GZOg=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "SecretKeySpec LIB",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjqbQhA903V4=",
- "_parent": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "name": "GetAesKey",
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjqbQhQ91U4o=",
- "_parent": {
- "$ref": "AAAAAAFnjqbQhA903V4="
- },
- "name": "key",
- "reference": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- },
- "multiplicity": "0..1",
- "defaultValue": "1"
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjqbQhQ92nmo=",
- "_parent": {
- "$ref": "AAAAAAFnjqbQhA903V4="
- },
- "reference": {
- "$ref": "AAAAAAFnjqSV+Q9GZOg="
- }
- }
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjqu1tBADvMA=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "Cipher LIB"
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjrFoGRBhs7I=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "UI _ ENCODE",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjsLb1xD0dwk=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjsLb1xD1cp4=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb1xD0dwk="
- },
- "reference": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "multiplicity": "1"
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjsLb1xD2Uqs=",
- "_parent": {
- "$ref": "AAAAAAFnjsLb1xD0dwk="
- },
- "reference": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "visibility": "private",
- "multiplicity": "1..*"
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvCm8V5WOeU=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "OnAction",
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvCm8V5Xxuo=",
- "_parent": {
- "$ref": "AAAAAAFnjvCm8V5WOeU="
- },
- "reference": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvCm8V5YrUg=",
- "_parent": {
- "$ref": "AAAAAAFnjvCm8V5WOeU="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvNbWX36geQ=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvNbWX37JTU=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX36geQ="
- },
- "reference": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvNbWX38ZTk=",
- "_parent": {
- "$ref": "AAAAAAFnjvNbWX36geQ="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- }
- }
- ],
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjrx6JhCPbs0=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "SELECT_PICTURE",
- "visibility": "private",
- "isStatic": true,
- "type": "String",
- "defaultValue": "100"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjryrrhCW5Ew=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "TAG",
- "visibility": "private",
- "isStatic": true,
- "type": "String",
- "defaultValue": "Encode Class"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjryywxCdAfg=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "Filepath",
- "visibility": "private",
- "type": "Uri"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjry14RCkcps=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "original_image",
- "visibility": "private",
- "type": "Bitmap"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjry65hCrjeU=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "imageSteganography, result",
- "visibility": "private",
- "type": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- }
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjrzBPBCyXM0=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "save",
- "type": "ProgressDialog"
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjshfYhJf+3Y=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "checkAndRequestPermissions"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjsldOxLFBQU=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "OnPressENCODE"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjsljDRLkMJU=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "OnPressDECODE"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjvPNpIIeYW0=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "OnPressSAVEIMAGE"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjvS1sYRybRs=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "saveToInternalStorage",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjvUaTYW0lXs=",
- "_parent": {
- "$ref": "AAAAAAFnjvS1sYRybRs="
- },
- "name": "bitmapImage",
- "type": ""
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjvU7aYZguis=",
- "_parent": {
- "$ref": "AAAAAAFnjvS1sYRybRs="
- },
- "name": "name",
- "type": ""
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjvXXN4dL7gk=",
- "_parent": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- },
- "name": "onActivityResult"
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjsp5xhTqyNg=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "TextEncoding AsyncTask",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjtLRBBwCblI=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjtLRBBwD7aY=",
- "_parent": {
- "$ref": "AAAAAAFnjtLRBBwCblI="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjtLRBBwE3w4=",
- "_parent": {
- "$ref": "AAAAAAFnjtLRBBwCblI="
- },
- "reference": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvDAuV7zqL8=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvDAuV70XNc=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV7zqL8="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvDAuV71sRA=",
- "_parent": {
- "$ref": "AAAAAAFnjvDAuV7zqL8="
- },
- "reference": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvJESmnCQio=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvJESmnDn+Q=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnCQio="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvJESmnEmic=",
- "_parent": {
- "$ref": "AAAAAAFnjvJESmnCQio="
- },
- "reference": {
- "$ref": "AAAAAAFnjvIVImdpVBY="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvavHouHptQ=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvavHouIKqw=",
- "_parent": {
- "$ref": "AAAAAAFnjvavHouHptQ="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvavHouJv+U=",
- "_parent": {
- "$ref": "AAAAAAFnjvavHouHptQ="
- },
- "reference": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- }
- }
- }
- ],
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtCZhBmf+vA=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "activity",
- "type": "Activity"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtEaMhnY6Vg=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "maximumProgress",
- "type": "int"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtF+hxoisLU=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "progressdialog",
- "type": "ProgressDialog"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtJAkRueTAc=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "result",
- "type": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- }
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtPJtx2FMhQ=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": " callbackInterface",
- "type": "TextEncodingCallback"
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjtQjTB35cEM=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "TextExcoding",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjtRgmh62tks=",
- "_parent": {
- "$ref": "AAAAAAFnjtQjTB35cEM="
- },
- "name": "TextEncodingCallback",
- "type": ""
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjtSiZR7dvyQ=",
- "_parent": {
- "$ref": "AAAAAAFnjtQjTB35cEM="
- },
- "name": "callbackInterface",
- "type": ""
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjtQsvx4wQuU=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "onPreExecute"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjtQyYh5nG+A=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "onPostExecute",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjtV91yABFS8=",
- "_parent": {
- "$ref": "AAAAAAFnjtQyYh5nG+A="
- },
- "name": "textStegnography",
- "type": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- }
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjtYy6SCHEy4=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "onProgressUpdate",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjtYy6SCIBjI=",
- "_parent": {
- "$ref": "AAAAAAFnjtYy6SCHEy4="
- },
- "name": "values",
- "type": "Interger..."
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjtcYwSFyY8A=",
- "_parent": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- },
- "name": "doInBackground",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjtcYwSFzees=",
- "_parent": {
- "$ref": "AAAAAAFnjtcYwSFyY8A="
- },
- "name": "imageSteganographies",
- "type": "ImageSteganography..."
- }
- ]
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjtlUfiQXOJI=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "EncodeDecode",
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtrBACSboao=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "TAG",
- "visibility": "private",
- "isStatic": true,
- "type": "",
- "defaultValue": "EncodeDecode.class.getName()"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtrR3iTSI4o=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "binary",
- "visibility": "private",
- "type": "int[]",
- "defaultValue": "{16, 8, 0};"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtrZHSUJL48=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "toShift",
- "visibility": "private",
- "type": "int[]",
- "defaultValue": "{6, 4, 2, 0};"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtrewCVAbJ4=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "andByte",
- "visibility": "private",
- "type": "byte[]",
- "defaultValue": "{(byte) 0xC0, 0x30, 0x0C, 0x03};"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtrkxyV3kiQ=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "END_MESSAGE_COSTANT",
- "visibility": "private",
- "type": "String",
- "defaultValue": "\"#!@\""
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjtrrGiWuI+c=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "START_MESSAGE_COSTANT",
- "visibility": "private",
- "type": "String",
- "defaultValue": "\"@!#\""
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjt3pDiniTF8=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "Byte[] EncodeMessage",
- "visibility": "private",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjt5ngCo4k1A=",
- "_parent": {
- "$ref": "AAAAAAFnjt3pDiniTF8="
- },
- "name": "integer_pixel_array",
- "type": "int[]"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjt5xrypgLsU=",
- "_parent": {
- "$ref": "AAAAAAFnjt3pDiniTF8="
- },
- "name": "image_columns",
- "type": "int"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjt51VCqIdOM=",
- "_parent": {
- "$ref": "AAAAAAFnjt3pDiniTF8="
- },
- "name": "image_rows",
- "type": "int"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjt56ESqwfMM=",
- "_parent": {
- "$ref": "AAAAAAFnjt3pDiniTF8="
- },
- "name": "messageEncodingStatus",
- "type": "MessageEncodingStatus"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjt5+oirY3tg=",
- "_parent": {
- "$ref": "AAAAAAFnjt3pDiniTF8="
- },
- "name": "progressHandler",
- "type": "ProgressHandler"
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuGzoS6xwZ8=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "List encodeMessage",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuIADi8Si04=",
- "_parent": {
- "$ref": "AAAAAAFnjuGzoS6xwZ8="
- },
- "name": "splitted_images",
- "type": "List"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuI6Ni9fdz0=",
- "_parent": {
- "$ref": "AAAAAAFnjuGzoS6xwZ8="
- },
- "name": "encrypted_message",
- "type": "String "
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuJ46y+tDVA=",
- "_parent": {
- "$ref": "AAAAAAFnjuGzoS6xwZ8="
- },
- "name": "progressHandler",
- "type": "ProgressHandler"
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuTT4jzttUs=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "String dencodeMessage",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuTT4zzu+b0=",
- "_parent": {
- "$ref": "AAAAAAFnjuTT4jzttUs="
- },
- "name": "encodedImages",
- "type": "List"
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuTd+T1BYT8=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "void decodeMessage",
- "visibility": "private",
- "isStatic": true,
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuTd+T1C6uQ=",
- "_parent": {
- "$ref": "AAAAAAFnjuTd+T1BYT8="
- },
- "name": "byte_pixel_array",
- "type": "byte[]"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuTd+j1Dgdo=",
- "_parent": {
- "$ref": "AAAAAAFnjuTd+T1BYT8="
- },
- "name": "image_columns",
- "type": "int"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuTd+j1EpiM=",
- "_parent": {
- "$ref": "AAAAAAFnjuTd+T1BYT8="
- },
- "name": "image_rows",
- "type": "int"
- },
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuTd+j1FlV8=",
- "_parent": {
- "$ref": "AAAAAAFnjuTd+T1BYT8="
- },
- "name": "messagedecodingStatus",
- "type": "MessagedecodingStatus"
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjueFOT89wKU=",
- "_parent": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- },
- "name": "int numberOfPixelForMessage",
- "isStatic": true,
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjufdGT+TdCw=",
- "_parent": {
- "$ref": "AAAAAAFnjueFOT89wKU="
- },
- "name": "message",
- "type": "int"
- }
- ]
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjug21kDFUhI=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "MessageDecodingStatus",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnju15RksRacw=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "subclass",
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnju15RksSN4Y=",
- "_parent": {
- "$ref": "AAAAAAFnju15RksRacw="
- },
- "reference": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "navigable": false
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnju15RksT0VU=",
- "_parent": {
- "$ref": "AAAAAAFnju15RksRacw="
- },
- "reference": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- }
- }
- }
- ],
- "visibility": "private",
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjujW6EGGgsc=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "message",
- "type": "String"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjujdt0G98Is=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "ended",
- "type": "boolean"
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuj0VEHz21Y=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "MessageDecodingStatus"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjukkDEJDF4g=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "isEnded"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuk2UUJ6A2g=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "setEnded"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuk6LUKxmJ8=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": " getMessage"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuk90ULorkM=",
- "_parent": {
- "$ref": "AAAAAAFnjug21kDFUhI="
- },
- "name": "setMessage",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjumvxUO4lvA=",
- "_parent": {
- "$ref": "AAAAAAFnjuk90ULorkM="
- },
- "name": "message",
- "type": ""
- }
- ]
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjuo7pEUx4Uw=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "MessageEncodingStatus",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnju27dUuynDA=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnju27dUuzI4Q=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUuynDA="
- },
- "reference": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "navigable": false
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnju27dUu0GAY=",
- "_parent": {
- "$ref": "AAAAAAFnju27dUuynDA="
- },
- "reference": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- }
- }
- }
- ],
- "visibility": "private",
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjuo7pEUyIqk=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "messageEncoded",
- "type": "boolean"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjuo7pEUzoEw=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "currentMessageIndex",
- "type": "int"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnju76vlH7OoU=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "byteArrayMessage",
- "type": "byte[]"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnju8yNVLbOwU=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "message",
- "type": "String "
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuo7pEU0tZI=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "incrementMessageIndex"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuo7pEU12YQ=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "getMessage"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuo7pEU2O5I=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "setMessage",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnju01/UpzKPE=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEU2O5I="
- },
- "name": "message",
- "type": ""
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuo7pEU3pds=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "isMessageEncoded"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuo7pEU4Yn4=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "setMessageEncoded",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuo7pEU5WtI=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEU4Yn4="
- },
- "name": "messageEncoded",
- "type": "boolean"
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuv3F0fRkHI=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "getCurrentMessageIndex"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuv84UgIEi4=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "setCurrentMessageIndex",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjuzOeEoUS2w=",
- "_parent": {
- "$ref": "AAAAAAFnjuv84UgIEi4="
- },
- "name": "currentMessageIndex",
- "type": ""
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuwB3kg/srI=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": " byte[] getByteArrayMessage"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjuwF2Eh2OZA=",
- "_parent": {
- "$ref": "AAAAAAFnjuo7pEUx4Uw="
- },
- "name": "void setByteArrayMessage"
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjvIVImdpVBY=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "Utility"
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjvggTZR5l9s=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "Android.Utils.Base64"
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjvl596xybT4=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "TextDecoding AsyncTask",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjvwuTc1ANVs=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvwuTc1Bptk=",
- "_parent": {
- "$ref": "AAAAAAFnjvwuTc1ANVs="
- },
- "reference": {
- "$ref": "AAAAAAFnjvl596xybT4="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjvwuTc1C7Qs=",
- "_parent": {
- "$ref": "AAAAAAFnjvwuTc1ANVs="
- },
- "reference": {
- "$ref": "AAAAAAFnjp66Gg7o+EA="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwB7RvOm/8g=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwB7RvOnQNo=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7RvOm/8g="
- },
- "reference": {
- "$ref": "AAAAAAFnjvl596xybT4="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwB7RvOoSvY=",
- "_parent": {
- "$ref": "AAAAAAFnjwB7RvOm/8g="
- },
- "reference": {
- "$ref": "AAAAAAFnjtlUfiQXOJI="
- }
- }
- }
- ],
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjvowHK4EVoM=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "name": "result",
- "type": "ImageSteganography "
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjvp3Ta/UwfQ=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "name": "textDecodingCallback",
- "type": "TextDecodingCallback"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjvrDjbGMPtI=",
- "_parent": {
- "$ref": "AAAAAAFnjvl596xybT4="
- },
- "name": "activity",
- "type": "Activity "
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjwL+bQ+/+Zc=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "UI _ DECODE",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwL+bQ/AQTQ=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwL+bQ/Bgz8=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ/AQTQ="
- },
- "reference": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "multiplicity": "1"
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwL+bQ/CArc=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ/AQTQ="
- },
- "reference": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- },
- "visibility": "private",
- "multiplicity": "1..*"
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwL+bQ/D+ek=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "OnAction",
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwL+bQ/EpLE=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ/D+ek="
- },
- "reference": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwL+bQ/FazI=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ/D+ek="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwL+bQ/GHKk=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwL+bQ/HiQw=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ/GHKk="
- },
- "reference": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwL+bQ/Iq38=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ/GHKk="
- },
- "reference": {
- "$ref": "AAAAAAFnjsp5xhTqyNg="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwVLxx6mapA=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwVLxx6nOBk=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLxx6mapA="
- },
- "reference": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwVLyB6oih8=",
- "_parent": {
- "$ref": "AAAAAAFnjwVLxx6mapA="
- },
- "reference": {
- "$ref": "AAAAAAFnjvl596xybT4="
- }
- }
- }
- ],
- "attributes": [
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjwL+bQ/JZiA=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "SELECT_PICTURE",
- "visibility": "private",
- "isStatic": true,
- "type": "String",
- "defaultValue": "100"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjwL+bQ/Kvas=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "TAG",
- "visibility": "private",
- "isStatic": true,
- "type": "String",
- "defaultValue": "Decode Class"
- },
- {
- "_type": "UMLAttribute",
- "_id": "AAAAAAFnjwL+bQ/NI5E=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "result",
- "visibility": "private",
- "type": {
- "$ref": "AAAAAAFnjpeueQ5Ig5Y="
- }
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwL+bQ/PE8I=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "void ImageChooser"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwL+bQ/Ql7o=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "OnPressENCODE"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwL+bg/RQB8=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "OnPressDECODE"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwL+bg/SEdA=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "onCompleteTextEncoding",
- "parameters": [
- {
- "_type": "UMLParameter",
- "_id": "AAAAAAFnjwTMHxxEIv8=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bg/SEdA="
- },
- "name": "result",
- "type": "ImageSteganography "
- }
- ]
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwL+bg/Wxzo=",
- "_parent": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- },
- "name": "onActivityResult"
- }
- ]
- },
- {
- "_type": "UMLClass",
- "_id": "AAAAAAFnjwW04CJY7e8=",
- "_parent": {
- "$ref": "AAAAAAFnjpd2FQ5D7EM="
- },
- "name": "Main_UI",
- "ownedElements": [
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwZeqCjjQ4g=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwZeqCjkyYs=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjjQ4g="
- },
- "reference": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwZeqCjlceU=",
- "_parent": {
- "$ref": "AAAAAAFnjwZeqCjjQ4g="
- },
- "reference": {
- "$ref": "AAAAAAFnjrFoGRBhs7I="
- }
- }
- },
- {
- "_type": "UMLAssociation",
- "_id": "AAAAAAFnjwZqainLgbc=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "end1": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwZqainMM7I=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainLgbc="
- },
- "reference": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- }
- },
- "end2": {
- "_type": "UMLAssociationEnd",
- "_id": "AAAAAAFnjwZqainNcZU=",
- "_parent": {
- "$ref": "AAAAAAFnjwZqainLgbc="
- },
- "reference": {
- "$ref": "AAAAAAFnjwL+bQ+/+Zc="
- }
- }
- }
- ],
- "operations": [
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwXs3CST/UE=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "name": "OnPressEncode"
- },
- {
- "_type": "UMLOperation",
- "_id": "AAAAAAFnjwX38iWh2ms=",
- "_parent": {
- "$ref": "AAAAAAFnjwW04CJY7e8="
- },
- "name": "OnPressDecode"
- }
- ]
- }
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/UML/UMLDOC.PNG b/UML/UMLDOC.PNG
deleted file mode 100644
index 9a487ab54f21884410f096f9a86ad3ef096a868d..0000000000000000000000000000000000000000
Binary files a/UML/UMLDOC.PNG and /dev/null differ
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index 7bd537b84720a9d1364e89f7c4e91d1e4ad7638e..0000000000000000000000000000000000000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,37 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 26
- defaultConfig {
- applicationId "com.ayush.steganography"
- minSdkVersion 19
- targetSdkVersion 26
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
-
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-
-}
-
-configurations.all {
- resolutionStrategy {
- force 'com.android.support:support-annotations:23.1.1'
- }
-}
-
-dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation 'com.android.support:appcompat-v7:26.1.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.0'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
- implementation project(':ImageSteganographyLibrary')
-}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
deleted file mode 100644
index f1b424510da51fd82143bc74a0a801ae5a1e2fcd..0000000000000000000000000000000000000000
--- a/app/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
deleted file mode 100644
index f90ba849df0dadde54366d989be5a667e4ddcfe8..0000000000000000000000000000000000000000
Binary files a/app/release/app-release.apk and /dev/null differ
diff --git a/app/release/output.json b/app/release/output.json
deleted file mode 100644
index 18db2fcf5c96f9153aee5819de3313ee12a6781b..0000000000000000000000000000000000000000
--- a/app/release/output.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"app-release.apk","properties":{"packageId":"com.ayush.steganography","split":"","minSdkVersion":"19"}}]
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/ayush/steganography/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/ayush/steganography/ExampleInstrumentedTest.java
deleted file mode 100644
index 8816c4f8f0140c0b234fbc1b6e4c01ad60fe788f..0000000000000000000000000000000000000000
--- a/app/src/androidTest/java/com/ayush/steganography/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.ayush.steganography;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
- assertEquals("com.ayush.steganography", appContext.getPackageName());
- }
-}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 8a6b611461d2c675544d1e07cf3861b12fab125e..0000000000000000000000000000000000000000
--- a/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png
deleted file mode 100644
index 0c69c522775b1966a53f9e29659624a0235451d0..0000000000000000000000000000000000000000
Binary files a/app/src/main/ic_launcher-web.png and /dev/null differ
diff --git a/app/src/main/java/com/ayush/steganography/Decode.java b/app/src/main/java/com/ayush/steganography/Decode.java
deleted file mode 100644
index ce14073ad626d6a7ecab05efb27d579efebf2dd1..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/ayush/steganography/Decode.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.ayush.steganography;
-
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.MediaStore;
-import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback.TextDecodingCallback;
-import com.ayush.imagesteganographylibrary.Text.ImageSteganography;
-import com.ayush.imagesteganographylibrary.Text.TextDecoding;
-
-import java.io.IOException;
-
-public class Decode extends AppCompatActivity implements TextDecodingCallback {
-
- private static final int SELECT_PICTURE = 100;
- private static final String TAG = "Decode Class";
- //Initializing the UI components
- private TextView textView;
- private ImageView imageView;
- private EditText message;
- private EditText secret_key;
- private Uri filepath;
- //Bitmap
- private Bitmap original_image;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_decode);
-
- //Instantiation of UI components
- textView = findViewById(R.id.whether_decoded);
-
- imageView = findViewById(R.id.imageview);
-
- message = findViewById(R.id.message);
- secret_key = findViewById(R.id.secret_key);
-
- Button choose_image_button = findViewById(R.id.choose_image_button);
- Button decode_button = findViewById(R.id.decode_button);
-
- //Choose Image Button
- choose_image_button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- ImageChooser();
- }
- });
-
- //Decode Button
- decode_button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (filepath != null) {
-
- //Making the ImageSteganography object
- ImageSteganography imageSteganography = new ImageSteganography(secret_key.getText().toString(),
- original_image);
-
- //Making the TextDecoding object
- TextDecoding textDecoding = new TextDecoding(Decode.this, Decode.this);
-
- //Execute Task
- textDecoding.execute(imageSteganography);
- }
- }
- });
-
-
- }
-
- private void ImageChooser() {
- Intent intent = new Intent();
- intent.setType("image/*");
- intent.setAction(Intent.ACTION_GET_CONTENT);
- startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- //Image set to imageView
- if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && data != null && data.getData() != null) {
-
- filepath = data.getData();
- try {
- original_image = MediaStore.Images.Media.getBitmap(getContentResolver(), filepath);
-
- imageView.setImageBitmap(original_image);
- } catch (IOException e) {
- Log.d(TAG, "Error : " + e);
- }
- }
-
- }
-
- @Override
- public void onStartTextEncoding() {
- //Whatever you want to do by the start of textDecoding
- }
-
- @Override
- public void onCompleteTextEncoding(ImageSteganography result) {
-
- //By the end of textDecoding
-
- if (result != null) {
- if (!result.isDecoded())
- textView.setText("No message found");
- else {
- if (!result.isSecretKeyWrong()) {
- textView.setText("Decoded");
- message.setText("" + result.getMessage());
- } else {
- textView.setText("Wrong secret key");
- }
- }
- } else {
- textView.setText("Select Image First");
- }
-
-
- }
-}
diff --git a/app/src/main/java/com/ayush/steganography/Encode.java b/app/src/main/java/com/ayush/steganography/Encode.java
deleted file mode 100644
index a04b563aba23bb4483b7b12a2317f7336c141052..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/ayush/steganography/Encode.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package com.ayush.steganography;
-
-import android.Manifest;
-import android.app.ProgressDialog;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.provider.MediaStore;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback.TextEncodingCallback;
-import com.ayush.imagesteganographylibrary.Text.ImageSteganography;
-import com.ayush.imagesteganographylibrary.Text.TextEncoding;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-public class Encode extends AppCompatActivity implements TextEncodingCallback {
-
- private static final int SELECT_PICTURE = 100;
- private static final String TAG = "Encode Class";
- //Created variables for UI
- private TextView whether_encoded;
- private ImageView imageView;
- private EditText message;
- private EditText secret_key;
- //Objects needed for encoding
- private TextEncoding textEncoding;
- private ImageSteganography imageSteganography;
- private ProgressDialog save;
- private Uri filepath;
- //Bitmaps
- private Bitmap original_image;
- private Bitmap encoded_image;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_encode);
-
- //initialized the UI components
-
- whether_encoded = findViewById(R.id.whether_encoded);
-
- imageView = findViewById(R.id.imageview);
-
- message = findViewById(R.id.message);
- secret_key = findViewById(R.id.secret_key);
-
- Button choose_image_button = findViewById(R.id.choose_image_button);
- Button encode_button = findViewById(R.id.encode_button);
- Button save_image_button = findViewById(R.id.save_image_button);
-
- checkAndRequestPermissions();
-
-
- //Choose image button
- choose_image_button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- ImageChooser();
- }
- });
-
- //Encode Button
- encode_button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- whether_encoded.setText("");
- if (filepath != null) {
- if (message.getText() != null) {
-
- //ImageSteganography Object instantiation
- imageSteganography = new ImageSteganography(message.getText().toString(),
- secret_key.getText().toString(),
- original_image);
- //TextEncoding object Instantiation
- textEncoding = new TextEncoding(Encode.this, Encode.this);
- //Executing the encoding
- textEncoding.execute(imageSteganography);
- }
- }
- }
- });
-
- //Save image button
- save_image_button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- final Bitmap imgToSave = encoded_image;
- Thread PerformEncoding = new Thread(new Runnable() {
- @Override
- public void run() {
- saveToInternalStorage(imgToSave);
- }
- });
- save = new ProgressDialog(Encode.this);
- save.setMessage("Saving, Please Wait...");
- save.setTitle("Saving Image");
- save.setIndeterminate(false);
- save.setCancelable(false);
- save.show();
- PerformEncoding.start();
- }
- });
-
- }
-
- private void ImageChooser() {
- Intent intent = new Intent();
- intent.setType("image/*");
- intent.setAction(Intent.ACTION_GET_CONTENT);
- startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- //Image set to imageView
- if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && data != null && data.getData() != null) {
-
- filepath = data.getData();
- try {
- original_image = MediaStore.Images.Media.getBitmap(getContentResolver(), filepath);
-
- imageView.setImageBitmap(original_image);
- } catch (IOException e) {
- Log.d(TAG, "Error : " + e);
- }
- }
-
- }
-
- // Override method of TextEncodingCallback
-
- @Override
- public void onStartTextEncoding() {
- //Whatever you want to do at the start of text encoding
- }
-
- @Override
- public void onCompleteTextEncoding(ImageSteganography result) {
-
- //By the end of textEncoding
-
- if (result != null && result.isEncoded()) {
- encoded_image = result.getEncoded_image();
- whether_encoded.setText("Encoded");
- imageView.setImageBitmap(encoded_image);
- }
- }
-
- private void saveToInternalStorage(Bitmap bitmapImage) {
- OutputStream fOut;
- File file = new File(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS), "Encoded" + ".PNG"); // the File to save ,
- try {
- fOut = new FileOutputStream(file);
- bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fOut); // saving the Bitmap to a file
- fOut.flush(); // Not really required
- fOut.close(); // do not forget to close the stream
- whether_encoded.post(new Runnable() {
- @Override
- public void run() {
- save.dismiss();
- }
- });
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- private void checkAndRequestPermissions() {
- int permissionWriteStorage = ContextCompat.checkSelfPermission(this,
- Manifest.permission.WRITE_EXTERNAL_STORAGE);
- int ReadPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
- List listPermissionsNeeded = new ArrayList<>();
- if (ReadPermission != PackageManager.PERMISSION_GRANTED) {
- listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
- }
- if (permissionWriteStorage != PackageManager.PERMISSION_GRANTED) {
- listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
- }
- if (!listPermissionsNeeded.isEmpty()) {
- ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[0]), 1);
- }
- }
-
-
-}
diff --git a/app/src/main/java/com/ayush/steganography/MainActivity.java b/app/src/main/java/com/ayush/steganography/MainActivity.java
deleted file mode 100644
index bbc984d30c6d0e8d0e504c17701b9fca79f54139..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/ayush/steganography/MainActivity.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.ayush.steganography;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.widget.Button;
-
-public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- Button encode = findViewById(R.id.encode_button);
- Button decode = findViewById(R.id.decode_button);
-
- encode.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- startActivity(new Intent(getApplicationContext(), Encode.class));
- }
- });
-
- decode.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- startActivity(new Intent(getApplicationContext(), Decode.class));
- }
- });
-
- }
-
-}
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index c7bd21dbd86990cde81fea8abd3bf904b4546749..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 01f0af0add58c1ae4e6d5b296cce73d9f9c99df1..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_decode.xml b/app/src/main/res/layout/activity_decode.xml
deleted file mode 100644
index ee7c4627533b7afaa9d3b3dafd1c0b4a1133d5b8..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/activity_decode.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_encode.xml b/app/src/main/res/layout/activity_encode.xml
deleted file mode 100644
index e3ac4fed8a73a872fcd2cc15e96d7e2132970154..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/activity_encode.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index 8a973c215ddf93c609b89f71f3b95f16044ce91c..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index c4a603d4cce78b2fbd8094bd0224d4778bc8c976..0000000000000000000000000000000000000000
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index c4a603d4cce78b2fbd8094bd0224d4778bc8c976..0000000000000000000000000000000000000000
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 749b7185932ab3eb6345c54a135bbc2d639862f8..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index 15f46f20a342c130a4913c3a9eb9f23dc2ae25e8..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 294b7c46373114fa85770ed6e8f5efe9b7c96f93..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index f608db7aee6131c6aa7beb3ce974fd92eeb231dc..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index a3c8c07755a119b3f815d5a15c5b74faa01149c7..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index a1c84c87f19304064a0dbacf65ce45776fcdf672..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 7a35bb542736642f329a3e369309987c2a3a4f99..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 766329a3931d13714fc1f7d5019e2501cd96f1bc..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 165c42fdc00a8ce66e435208e8a8f439ebf4d556..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 494e85ee0dee6ebeb4c9092b4472f37dcfe9989a..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index db279e5b5b364804e525ddae524682d5381f2c80..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index f8db5b5b1091738fe5a05fffe4d2483094258f2e..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 497e3c608a61935bbca3d94fb5ccf9c85b290d62..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 128699f57cf2bf90edc61e4f532af9ed09ab0cb8..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 904d433792ce1a8ae2a7f2a9d2f206ed8b4caa8c..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
deleted file mode 100644
index 3ab3e9cbce07f7cdc941fc8ba424c05e83ed80f0..0000000000000000000000000000000000000000
--- a/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- #3F51B5
- #303F9F
- #FF4081
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
deleted file mode 100644
index eaba430749017aed349f4775f143b85b8205d3e4..0000000000000000000000000000000000000000
--- a/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- Steganography
-
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
deleted file mode 100644
index 5885930df6d10edf3d6df40d6556297d11f953da..0000000000000000000000000000000000000000
--- a/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml
deleted file mode 100644
index 2aa1ce1fc0110bf8da00b883d00c8c0bb530e3b8..0000000000000000000000000000000000000000
--- a/app/src/main/res/xml/file_paths.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/test/java/com/ayush/steganography/ExampleUnitTest.java b/app/src/test/java/com/ayush/steganography/ExampleUnitTest.java
deleted file mode 100644
index 2f7ed74d8df1628388b26c9120a57776d58d5e8e..0000000000000000000000000000000000000000
--- a/app/src/test/java/com/ayush/steganography/ExampleUnitTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ayush.steganography;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index e6b32bc7884bb98a5024981d37fec787514b56c8..f8ede18efb61b35a0013045635b07cc83ab06392 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,27 +1,51 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
+apply plugin: 'com.huawei.ohos.app'
+
+ohos {
+ signingConfigs {
+ release {
+ storeFile file('D:\\Image-Steganography-Library-HM\\keystore\\rtpDebug.p12')
+ storePassword '0000001918A0816E43BFBD09D51F203B4C96B89698A92FB3EE445EA576CE9CB0D6EDEA85F57FB04B25'
+ keyAlias = 'RTPAlias'
+ keyPassword '00000019582CBC7CE5D459C4CF4F3C3D99A3B5518C5E2E8ED161CEB5295B9B353D22091CCE5FFC9414'
+ signAlg = 'SHA256withECDSA'
+ profile file('D:\\Image-Steganography-Library-HM\\keystore\\image_steganographyDebug.p7b')
+ certpath file('D:\\Image-Steganography-Library-HM\\keystore\\rtpDebug.cer')
+ }
+ }
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+}
buildscript {
-
repositories {
- google()
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.0.1'
-
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
+ classpath 'com.huawei.ohos:hap:2.4.2.7'
+ classpath 'com.huawei.ohos:decctest:1.0.0.7'
}
}
allprojects {
repositories {
- google()
+ maven {
+ url 'https://s01.oss.sonatype.org/content/repositories/snapshots/'
+ }
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
jcenter()
}
}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/ImageSteganographyLibrary/.gitignore b/entry/.gitignore
similarity index 100%
rename from ImageSteganographyLibrary/.gitignore
rename to entry/.gitignore
diff --git a/entry/build.gradle b/entry/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..f21ab59dd37a058fe75fced59aed10eb6ea1e684
--- /dev/null
+++ b/entry/build.gradle
@@ -0,0 +1,27 @@
+apply plugin: 'com.huawei.ohos.hap'
+apply plugin: 'com.huawei.ohos.decctest'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
+ testImplementation 'junit:junit:4.13'
+ ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100'
+ compile project(':imagesteganographylibrary')
+}
+decc {
+ supportType = ['html', 'xml']
+}
diff --git a/entry/proguard-rules.pro b/entry/proguard-rules.pro
new file mode 100644
index 0000000000000000000000000000000000000000..f7666e47561d514b2a76d5a7dfbb43ede86da92a
--- /dev/null
+++ b/entry/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/entry/src/main/config.json b/entry/src/main/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..089f07f3d5eb90c48468193011de54d36d296c0c
--- /dev/null
+++ b/entry/src/main/config.json
@@ -0,0 +1,61 @@
+{
+ "app": {
+ "bundleName": "com.example.image_steganography_library_master",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.image_steganography_library_master",
+ "name": ".MyApplication",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "name": "com.example.image_steganography_library_master.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ },
+ {
+ "icon": "$media:icon",
+ "name": "com.example.image_steganography_library_master.Decode",
+ "description": "",
+ "type": "page"
+ },
+ {
+ "icon": "$media:icon",
+ "name": "com.example.image_steganography_library_master.Encode",
+ "description": "",
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/java/com/example/image_steganography_library_master/Decode.java b/entry/src/main/java/com/example/image_steganography_library_master/Decode.java
new file mode 100644
index 0000000000000000000000000000000000000000..a36ba49838040caece55ab5035d683211f901d9a
--- /dev/null
+++ b/entry/src/main/java/com/example/image_steganography_library_master/Decode.java
@@ -0,0 +1,122 @@
+package com.example.image_steganography_library_master;
+
+
+import com.example.imagesteganographylibrary.Text.AsyncTaskCallback.TextDecodingCallback;
+import com.example.imagesteganographylibrary.Text.ImageSteganography;
+import com.example.imagesteganographylibrary.Text.TextDecoding;
+import com.example.imagesteganographylibrary.Utils.ImageUtil;
+import com.example.imagesteganographylibrary.Utils.Utility;
+import com.example.imagesteganographylibrary.view.ProgressDialog;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+import ohos.aafwk.content.Operation;
+import ohos.agp.components.*;
+import ohos.media.image.PixelMap;
+import ohos.utils.IntentConstants;
+import ohos.utils.net.Uri;
+
+public class Decode extends Ability implements TextDecodingCallback {
+ private static final int SELECT_PICTURE = 100;
+ private static final int RESULT_OK = -1;
+ private static final String TAG = "Decode Class";
+ //Initializing the UI components
+ private Text textView;
+ private Text whether_encoded;
+ private Image imageView;
+ private TextField message;
+ private TextField secret_key;
+ private Uri filepath;
+ //Bitmap
+ private PixelMap original_image;
+ private ProgressDialog progressDialog;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_decode);
+ textView = (Text) findComponentById(ResourceTable.Id_textView);
+ imageView = (Image) findComponentById(ResourceTable.Id_imageview);
+ message = (TextField) findComponentById(ResourceTable.Id_message);
+ secret_key = (TextField) findComponentById(ResourceTable.Id_secret_key);
+ whether_encoded = (Text) findComponentById(ResourceTable.Id_whether_decoded);
+ Button choose_image_button = (Button) findComponentById(ResourceTable.Id_choose_image_button);
+ Button decode_button = (Button) findComponentById(ResourceTable.Id_decode_button);
+ //Choose Image Button
+ choose_image_button.setClickedListener(new Component.ClickedListener() {
+ @Override
+ public void onClick(Component component) {
+ ImageChooser();
+ }
+ });
+
+ //Decode Button
+ decode_button.setClickedListener(new Component.ClickedListener() {
+ @Override
+ public void onClick(Component component) {
+ whether_encoded.setText("");
+ if (filepath != null) {
+ if (!Utility.isStringEmpty(secret_key.getText())) {
+ //Making the ImageSteganography object
+ ImageSteganography imageSteganography = new ImageSteganography(secret_key.getText(),
+ original_image);
+
+ //Making the TextDecoding object
+ TextDecoding textDecoding = new TextDecoding(Decode.this, Decode.this);
+ textDecoding.doInBackground(imageSteganography);
+ } else {
+ whether_encoded.setText("No message found");
+ }
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onStartTextEncoding() {
+ //Whatever you want to do by the start of textDecoding
+ progressDialog = new ProgressDialog(this);
+ progressDialog.showDialog("Decoding Message","Loading, Please Wait...");
+ }
+
+ @Override
+ public void onCompleteTextEncoding(ImageSteganography result) {
+ //By the end of textDecoding
+ progressDialog.hideDialog();
+ if (result != null) {
+ if (!result.isDecoded())
+ whether_encoded.setText("No message found");
+ else {
+ if (!result.isSecretKeyWrong()) {
+ message.setText("" + result.getMessage());
+ } else {
+ whether_encoded.setText("Wrong secret key");
+ }
+ }
+ } else {
+ whether_encoded.setText("Select Image First");
+ }
+ }
+
+ private void ImageChooser() {
+ Intent intent = new Intent();
+ Operation operation = new Intent.OperationBuilder()
+ .withAction(IntentConstants.ACTION_CHOOSE)
+ .build();
+ intent.setType("image/*");
+ intent.setOperation(operation);
+ startAbilityForResult(intent, SELECT_PICTURE);
+ }
+
+ @Override
+ protected void onAbilityResult(int requestCode, int resultCode, Intent data) {
+ super.onAbilityResult(requestCode, resultCode, data);
+ //Image set to imageView
+ if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && data != null && data.getUri() != null) {
+ filepath = ImageUtil.getPath(data.getUri());
+ original_image = ImageUtil.getPixMap(this, filepath, 1);
+ if (original_image != null) {
+ imageView.setPixelMap(original_image);
+ }
+ }
+ }
+}
diff --git a/entry/src/main/java/com/example/image_steganography_library_master/Encode.java b/entry/src/main/java/com/example/image_steganography_library_master/Encode.java
new file mode 100644
index 0000000000000000000000000000000000000000..b0f1e7609353e8a4e839b2aa8076c251e8d31cc6
--- /dev/null
+++ b/entry/src/main/java/com/example/image_steganography_library_master/Encode.java
@@ -0,0 +1,204 @@
+package com.example.image_steganography_library_master;
+
+
+import com.example.imagesteganographylibrary.Text.AsyncTaskCallback.TextEncodingCallback;
+import com.example.imagesteganographylibrary.Text.ImageSteganography;
+
+import com.example.imagesteganographylibrary.Text.TextEncoding;
+
+import com.example.imagesteganographylibrary.Utils.ImageUtil;
+import com.example.imagesteganographylibrary.view.ProgressDialog;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.ability.DataAbilityHelper;
+import ohos.aafwk.content.Intent;
+import ohos.aafwk.content.Operation;
+import ohos.agp.components.*;
+import ohos.app.dispatcher.TaskDispatcher;
+import ohos.bundle.IBundleManager;
+import ohos.data.rdb.ValuesBucket;
+import ohos.hiviewdfx.HiLogLabel;
+import ohos.media.image.ImagePacker;
+import ohos.media.image.PixelMap;
+import ohos.media.photokit.metadata.AVStorage;
+import ohos.utils.IntentConstants;
+import ohos.utils.net.Uri;
+import java.io.*;
+
+
+public class Encode extends Ability implements TextEncodingCallback, Component.ClickedListener {
+
+ private static final HiLogLabel LABEL_LOG = new HiLogLabel(0, 0, "Encode");
+ public static final int IMAGE_SELECT_REQUEST = 1001;
+ //Created variables for UI
+ private Text whether_encoded;
+ private Image imageView;
+
+ private TextField message;
+ private TextField secret_key;
+ //Objects needed for encoding
+ private TextEncoding textEncoding;
+ private ImageSteganography imageSteganography;
+
+ //Bitmaps
+ private PixelMap original_image;
+ private PixelMap encoded_image;
+ private Uri filepath;
+ private TaskDispatcher taskDispatcher;
+ private String filename = "encoding";
+ private ProgressDialog progressDialog;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_encode);
+ whether_encoded = (Text) findComponentById(ResourceTable.Id_whether_encoded);
+ imageView = (Image) findComponentById(ResourceTable.Id_imageview);
+ message = (TextField) findComponentById(ResourceTable.Id_message);
+ secret_key = (TextField) findComponentById(ResourceTable.Id_secret_key);
+
+ Button choose_image_button = (Button) findComponentById(ResourceTable.Id_choose_image_button);
+ Button encode_button = (Button) findComponentById(ResourceTable.Id_encode_button);
+ Button save_image_button = (Button) findComponentById(ResourceTable.Id_save_image_button);
+
+ checkAndRequestPermissions();
+ choose_image_button.setClickedListener(this::onClick);
+ encode_button.setClickedListener(this::onClick);
+ save_image_button.setClickedListener(this::onClick);
+ textEncoding = new TextEncoding(this, this);
+ taskDispatcher = getUITaskDispatcher();
+ }
+
+ private void saveToInternalStorage(String filename, PixelMap pixelMap) {
+ try {
+ ValuesBucket valuesBucket = new ValuesBucket();
+ valuesBucket.putString(AVStorage.Images.Media.DISPLAY_NAME, filename);
+ valuesBucket.putString("relative_path", "DCIM/");
+ valuesBucket.putString(AVStorage.Images.Media.MIME_TYPE, "image/JPEG");
+ //应用独占
+ valuesBucket.putInteger("is_pending", 1);
+ DataAbilityHelper helper = DataAbilityHelper.creator(this);
+ int id = helper.insert(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, valuesBucket);
+ Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id));
+ //这里需要"w"写权限
+ FileDescriptor fd = helper.openFile(uri, "w");
+ ImagePacker imagePacker = ImagePacker.create();
+ ImagePacker.PackingOptions packingOptions = new ImagePacker.PackingOptions();
+ OutputStream outputStream = new FileOutputStream(fd);
+ boolean result = imagePacker.initializePacking(outputStream, packingOptions);
+ if (result) {
+ result = imagePacker.addImage(pixelMap);
+ if (result) {
+ long dataSize = imagePacker.finalizePacking();
+ }
+ }
+ outputStream.flush();
+ outputStream.close();
+ valuesBucket.clear();
+ //解除独占
+ valuesBucket.putInteger("is_pending", 0);
+ helper.update(uri, valuesBucket, null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ taskDispatcher.asyncDispatch(new Runnable() {
+ @Override
+ public void run() {
+ progressDialog.hideDialog();
+ }
+ });
+ }
+
+ @Override
+ public void onStartTextEncoding() {
+ //Whatever you want to do at the start of text encoding
+ progressDialog = new ProgressDialog(this);
+ progressDialog.showDialog("Encoding Message","Loading, Please Wait...");
+ }
+
+ @Override
+ public void onCompleteTextEncoding(ImageSteganography result) {
+ // By the end of textEncoding
+ progressDialog.hideDialog();
+ whether_encoded.setText("Encodeding");
+ if (result != null && result.isEncoded()) {
+ encoded_image = result.getEncoded_image();
+ imageView.setPixelMap(encoded_image);
+ }
+ }
+
+ private void checkAndRequestPermissions() {
+ if (verifySelfPermission("ohos.permission.READ_USER_STORAGE") != IBundleManager.PERMISSION_GRANTED) {
+ if (canRequestPermission("ohos.permission.READ_USER_STORAGE")) {
+ requestPermissionsFromUser(new String[]{"ohos.permission.READ_USER_STORAGE"}, 0);
+ }
+ }
+ if (verifySelfPermission("ohos.permission.WRITE_USER_STORAGE") != IBundleManager.PERMISSION_GRANTED) {
+ if (canRequestPermission("ohos.permission.WRITE_USER_STORAGE")) {
+ requestPermissionsFromUser(new String[]{"ohos.permission.WRITE_USER_STORAGE"}, 0);
+ }
+ }
+ }
+
+ @Override
+ public void onClick(Component component) {
+
+ switch (component.getId()) {
+ case ResourceTable.Id_choose_image_button:
+ ImageChooser();
+ break;
+ case ResourceTable.Id_encode_button:
+ whether_encoded.setText("");
+ if (filepath != null) {
+ if (!message.getText().isEmpty() && !secret_key.getText().isEmpty()) {
+ progressDialog.showDialog("Encoding Message","Loading, Please Wait...");
+ //ImageSteganography Object instantiation
+ imageSteganography = new ImageSteganography(message.getText(),
+ secret_key.getText(),
+ original_image);
+ //TextEncoding object Instantiation
+ textEncoding = new TextEncoding(Encode.this, Encode.this);
+ //Executing the encoding
+ filename = imageSteganography.getEncrypted_message() + "#";
+ textEncoding.inBack(imageSteganography);
+ }
+ }
+ break;
+ case ResourceTable.Id_save_image_button:
+ final PixelMap imgToSave = encoded_image;
+ progressDialog = new ProgressDialog(this);
+ progressDialog.showDialog("Saving Image","Saving, Please Wait...");
+ Thread PerformEncoding = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ saveToInternalStorage(filename, imgToSave);
+ }
+ });
+ PerformEncoding.start();
+ break;
+ default:
+ }
+ }
+
+ private void ImageChooser() {
+ Intent intent = new Intent();
+ Operation operation = new Intent.OperationBuilder()
+ .withAction(IntentConstants.ACTION_CHOOSE)
+ .build();
+ intent.setType("image/*");
+ intent.setOperation(operation);
+ startAbilityForResult(intent, IMAGE_SELECT_REQUEST);
+ }
+
+ @Override
+ protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
+ super.onAbilityResult(requestCode, resultCode, resultData);
+ if (requestCode == IMAGE_SELECT_REQUEST && resultData != null && resultData.getUri() != null) {
+ filepath = ImageUtil.getPath(resultData.getUri());
+ original_image = ImageUtil.getPixMap(this, filepath, 0);
+ if (original_image != null) {
+ imageView.setPixelMap(original_image);
+ }
+ }
+ }
+
+}
diff --git a/entry/src/main/java/com/example/image_steganography_library_master/MainAbility.java b/entry/src/main/java/com/example/image_steganography_library_master/MainAbility.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c16f1f299aa1980b3093c21691e5084134b8133
--- /dev/null
+++ b/entry/src/main/java/com/example/image_steganography_library_master/MainAbility.java
@@ -0,0 +1,15 @@
+package com.example.image_steganography_library_master;
+
+import com.example.image_steganography_library_master.slice.MainAbilitySlice;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+import ohos.agp.window.service.WindowManager;
+
+public class MainAbility extends Ability {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ getWindow().setInputPanelDisplayType(WindowManager.LayoutConfig.INPUT_ADJUST_PAN);
+ super.setMainRoute(MainAbilitySlice.class.getName());
+ }
+}
diff --git a/entry/src/main/java/com/example/image_steganography_library_master/MyApplication.java b/entry/src/main/java/com/example/image_steganography_library_master/MyApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..a30ba63c6912af8cf691b73fe5fd73c82a310782
--- /dev/null
+++ b/entry/src/main/java/com/example/image_steganography_library_master/MyApplication.java
@@ -0,0 +1,12 @@
+package com.example.image_steganography_library_master;
+
+import ohos.aafwk.ability.AbilityPackage;
+import ohos.media.image.PixelMap;
+
+public class MyApplication extends AbilityPackage {
+
+ @Override
+ public void onInitialize() {
+ super.onInitialize();
+ }
+}
diff --git a/entry/src/main/java/com/example/image_steganography_library_master/slice/MainAbilitySlice.java b/entry/src/main/java/com/example/image_steganography_library_master/slice/MainAbilitySlice.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d6bde538cb698e4fb6ffe76b8c0ea781f9c6aad
--- /dev/null
+++ b/entry/src/main/java/com/example/image_steganography_library_master/slice/MainAbilitySlice.java
@@ -0,0 +1,57 @@
+package com.example.image_steganography_library_master.slice;
+
+import com.example.image_steganography_library_master.Decode;
+import com.example.image_steganography_library_master.Encode;
+import com.example.image_steganography_library_master.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.aafwk.content.Operation;
+import ohos.agp.components.Button;
+import ohos.agp.components.Component;
+
+public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_main);
+ Button encode = (Button) findComponentById(ResourceTable.Id_encode_button);
+ Button decode = (Button) findComponentById(ResourceTable.Id_decode_button);
+ encode.setClickedListener(this::onClick);
+ decode.setClickedListener(this::onClick);
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private void startAbilitys(String toPages) {
+ Intent secondIntent = new Intent();
+ // 指定待启动FA的bundleName和abilityName
+ Operation operation = new Intent.OperationBuilder()
+ .withDeviceId("")
+ .withBundleName(getAbilityPackageContext().getBundleName())
+ .withAbilityName(toPages)
+ .build();
+ secondIntent.setOperation(operation);
+ startAbility(secondIntent);
+ }
+
+ @Override
+ public void onClick(Component component) {
+ switch (component.getId()) {
+ case ResourceTable.Id_encode_button:
+ startAbilitys(Encode.class.getName());
+ break;
+ case ResourceTable.Id_decode_button:
+ startAbilitys(Decode.class.getName());
+ break;
+ default:
+ }
+ }
+}
diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json
new file mode 100644
index 0000000000000000000000000000000000000000..b158cbfb8223051baccfeedf6baa9c3d37f48a7f
--- /dev/null
+++ b/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,16 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "Image_Steganography_Library_ohos"
+ },
+ {
+ "name": "mainability_description",
+ "value": "Java_Phone_Empty Feature Ability"
+ },
+ {
+ "name": "mainability_HelloWorld",
+ "value": "Hello World"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_ability_decode.xml b/entry/src/main/resources/base/graphic/background_ability_decode.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_ability_decode.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_ability_dialog.xml b/entry/src/main/resources/base/graphic/background_ability_dialog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_ability_dialog.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_ability_encode.xml b/entry/src/main/resources/base/graphic/background_ability_encode.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_ability_encode.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_ability_main.xml b/entry/src/main/resources/base/graphic/background_ability_main.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0c0a3df480fa387a452b9c40ca191cc918a3fc0
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_ability_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_button.xml b/entry/src/main/resources/base/graphic/background_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ce36b0a04c5c0f71f1bca0049c0041b2be81e64
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_button.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_text.xml b/entry/src/main/resources/base/graphic/background_text.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96845ce3bedbc7b5956cc4e6ba216e75e67a150b
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_text.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/background_text_field.xml b/entry/src/main/resources/base/graphic/background_text_field.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6f33402c7619bb14fa402cf0e2bfdbfc3b9faf03
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/background_text_field.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/graphic/cursor_bubble.xml b/entry/src/main/resources/base/graphic/cursor_bubble.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a0101fa1b4f7386bbe71527e05e549bda83a7ad
--- /dev/null
+++ b/entry/src/main/resources/base/graphic/cursor_bubble.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/layout/ability_decode.xml b/entry/src/main/resources/base/layout/ability_decode.xml
new file mode 100644
index 0000000000000000000000000000000000000000..410d1ab489195238985b57d457b31644c3d17667
--- /dev/null
+++ b/entry/src/main/resources/base/layout/ability_decode.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/layout/ability_dialog.xml b/entry/src/main/resources/base/layout/ability_dialog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4f15677151df67b6b6676e73ebaee19754bbf558
--- /dev/null
+++ b/entry/src/main/resources/base/layout/ability_dialog.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/layout/ability_encode.xml b/entry/src/main/resources/base/layout/ability_encode.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9282a9fd167a8bba03d4c7ef1921fd684005b50f
--- /dev/null
+++ b/entry/src/main/resources/base/layout/ability_encode.xml
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/layout/ability_main.xml b/entry/src/main/resources/base/layout/ability_main.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a801f5228d1427ed0d040110a9efcecfc089899
--- /dev/null
+++ b/entry/src/main/resources/base/layout/ability_main.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/base/media/icon.png b/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/entry/src/main/resources/base/media/icon.png differ
diff --git a/entry/src/ohosTest/config.json b/entry/src/ohosTest/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..648c11d09dbc98867674cea88e29a517f9873f37
--- /dev/null
+++ b/entry/src/ohosTest/config.json
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "bundleName": "com.example.image_steganography_library_master",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.image_steganography_library_master",
+ "name": "testModule",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": true
+ },
+ "abilities": [
+ {
+ "name": "decc.testkit.runner.EntryAbility",
+ "description": "Test Entry Ability",
+ "icon": "$media:icon",
+ "label": "imagesteganographylibrary",
+ "launchType": "standard",
+ "orientation": "landscape",
+ "visible": true,
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/entry/src/ohosTest/java/com/example/image_steganography_library_master/ExampleOhosTest.java b/entry/src/ohosTest/java/com/example/image_steganography_library_master/ExampleOhosTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ad35aee7209de6d47970e16ecb6476d3f41042c
--- /dev/null
+++ b/entry/src/ohosTest/java/com/example/image_steganography_library_master/ExampleOhosTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain an copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.image_steganography_library_master;
+
+import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
+import org.junit.Test;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * ExampleOhosTest
+ *
+ * @ProjectName: Image-Steganography-Library
+ * @ClassName: ExampleOhosTest
+ * @Description: test
+ * @Author: lr
+ * @CreateDate: 2021/5/25 14:19
+ * @since 2021-05-25
+ */
+public class ExampleOhosTest {
+ @Test
+ public void testBundleName() {
+ final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName();
+ assertEquals("com.example.image_steganography_library_master", actualBundleName);
+ }
+
+ /**
+ * 权限检查 test
+ */
+ @Test
+ public void checkAndRequestPermissions(){
+ try {
+ Class encodeAbility = Class.forName("com.example.image_steganography_library_master.Encode");
+ Method imageChooserMethod = encodeAbility.getMethod("checkAndRequestPermissions");
+ Object object = encodeAbility.getConstructor().newInstance();
+ imageChooserMethod.invoke(object);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 相册选择图片 test
+ */
+ @Test
+ public void ImageChooser(){
+ try {
+ Class encodeAbility = Class.forName("com.example.image_steganography_library_master.Encode");
+ Method imageChooserMethod = encodeAbility.getMethod("ImageChooser");
+ Object object = encodeAbility.getConstructor().newInstance();
+ imageChooserMethod.invoke(object);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/entry/src/test/java/com/example/image_steganography_library_master/ExampleTest.java b/entry/src/test/java/com/example/image_steganography_library_master/ExampleTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..33c1ce4c7cbd721ac83712e70b0f6282acb85ecd
--- /dev/null
+++ b/entry/src/test/java/com/example/image_steganography_library_master/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.image_steganography_library_master;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/gif/Image-Steganography-Library.gif b/gif/Image-Steganography-Library.gif
new file mode 100644
index 0000000000000000000000000000000000000000..72be98569eab99f2fc32b7795baed1a9a22bb355
Binary files /dev/null and b/gif/Image-Steganography-Library.gif differ
diff --git a/gradle.properties b/gradle.properties
index aac7c9b4614ccfde6c721f24994cf30885a791d0..0daf1830fbdef07e50a44d74210c8c82f1b66278 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,17 +1,10 @@
# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
+# IDE (e.g. DevEco Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
-
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
-
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
+# If the Chinese output is garbled, please configure the following parameter.
+# org.gradle.jvmargs=-Dfile.encoding=GBK
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 13372aef5e24af05341d49695ee84e5f9b594659..490fda8577df6c95960ba7077c43220e5bb2c0d9 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 2c134a1f1256c6e0bd8cae4fd7a954c409a34cb0..f59159e865d4b59feb1b8c44b001f62fc5d58df4 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Mon May 07 21:22:54 IST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/gradlew b/gradlew
index 9d82f78915133e1c35a6ea51252590fb38efac2f..536f0272dd995f3afdb5e34e0f42bdf3d1986c22 100644
--- a/gradlew
+++ b/gradlew
@@ -1,4 +1,20 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
##############################################################################
##
@@ -6,155 +22,162 @@
##
##############################################################################
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ]; do
+ ls=$(ls -ld "$PRG")
+ link=$(expr "$ls" : '.*-> \(.*\)$')
+ if expr "$link" : '/.*' >/dev/null; then
+ PRG="$link"
+ else
+ PRG=$(dirname "$PRG")"/$link"
+ fi
+done
+SAVED="$(pwd)"
+cd "$(dirname \"$PRG\")/" >/dev/null
+APP_HOME="$(pwd -P)"
+cd "$SAVED" >/dev/null
APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+APP_BASE_NAME=$(basename "$0")
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
-warn ( ) {
- echo "$*"
+warn() {
+ echo "$*"
}
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
+die() {
+ echo
+ echo "$*"
+ echo
+ exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
+nonstop=false
+case "$(uname)" in
+CYGWIN*)
+ cygwin=true
+ ;;
+Darwin*)
+ darwin=true
+ ;;
+MINGW*)
+ msys=true
+ ;;
+NONSTOP*)
+ nonstop=true
+ ;;
esac
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+if [ -n "$JAVA_HOME" ]; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ]; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
- fi
+ fi
else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ]; then
+ MAX_FD_LIMIT=$(ulimit -H -n)
+ if [ $? -eq 0 ]; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
+ MAX_FD="$MAX_FD_LIMIT"
fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ]; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ]; then
+ APP_HOME=$(cygpath --path --mixed "$APP_HOME")
+ CLASSPATH=$(cygpath --path --mixed "$CLASSPATH")
+ JAVACMD=$(cygpath --unix "$JAVACMD")
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=$(find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null)
+ SEP=""
+ for dir in $ROOTDIRSRAW; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ]; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@"; do
+ CHECK=$(echo "$arg" | egrep -c "$OURCYGPATTERN" -)
+ CHECK2=$(echo "$arg" | egrep -c "^-") ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ]; then ### Added a condition
+ eval $(echo args$i)=$(cygpath --path --ignore --mixed "$arg")
+ else
+ eval $(echo args$i)="\"$arg\""
fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
+ i=$(expr $i + 1)
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
fi
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
+# Escape application args
+save() {
+ for i; do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/"; done
+ echo " "
}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 8a0b282aa6885fb573c106b3551f7275c5f17e8e..62bd9b9ccefea2b65ae41e5d9a545e2021b90a1d 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,3 +1,19 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -8,14 +24,17 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -46,10 +65,9 @@ echo location of your Java installation.
goto fail
:init
-@rem Get command-line arguments, handling Windowz variants
+@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
@@ -60,11 +78,6 @@ set _SKIP=2
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
diff --git a/images/cover.png b/images/cover.png
deleted file mode 100644
index c57ffc7f323d3c204af4e4eaae2265a20e83fb8f..0000000000000000000000000000000000000000
Binary files a/images/cover.png and /dev/null differ
diff --git a/images/decode.gif b/images/decode.gif
deleted file mode 100644
index 8b19face40604955fcfd3973b4cfc1f5a586bd79..0000000000000000000000000000000000000000
Binary files a/images/decode.gif and /dev/null differ
diff --git a/images/encode.gif b/images/encode.gif
deleted file mode 100644
index 73cab4cecbcc260b79c52ddbea0b98e22f9354ef..0000000000000000000000000000000000000000
Binary files a/images/encode.gif and /dev/null differ
diff --git a/images/lsb1.png b/images/lsb1.png
deleted file mode 100644
index acf83bd86152a0adf9aa8da2cdc5f8e6eb2ae093..0000000000000000000000000000000000000000
Binary files a/images/lsb1.png and /dev/null differ
diff --git a/images/original_encoded.png b/images/original_encoded.png
deleted file mode 100644
index e104bae88c9279b5ad20091bf3390c5cb73d4ab0..0000000000000000000000000000000000000000
Binary files a/images/original_encoded.png and /dev/null differ
diff --git a/app/.gitignore b/imagesteganographylibrary/.gitignore
similarity index 100%
rename from app/.gitignore
rename to imagesteganographylibrary/.gitignore
diff --git a/imagesteganographylibrary/build.gradle b/imagesteganographylibrary/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..e1c0b274a6c5cb35b197a177a17684addf760676
--- /dev/null
+++ b/imagesteganographylibrary/build.gradle
@@ -0,0 +1,21 @@
+apply plugin: 'com.huawei.ohos.library'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ testImplementation 'junit:junit:4.13'
+}
diff --git a/imagesteganographylibrary/proguard-rules.pro b/imagesteganographylibrary/proguard-rules.pro
new file mode 100644
index 0000000000000000000000000000000000000000..f7666e47561d514b2a76d5a7dfbb43ede86da92a
--- /dev/null
+++ b/imagesteganographylibrary/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/imagesteganographylibrary/src/main/config.json b/imagesteganographylibrary/src/main/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..3ad32fb29ce3690a9e73ab68d0397d2e9c94a7bd
--- /dev/null
+++ b/imagesteganographylibrary/src/main/config.json
@@ -0,0 +1,28 @@
+{
+ "app": {
+ "bundleName": "com.example.image_steganography_library_master",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {
+ },
+ "module": {
+ "package": "com.example.imagesteganographylibrary",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "imagesteganographylibrary",
+ "moduleType": "har"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java
similarity index 59%
rename from ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java
rename to imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java
index f257565259ca4f6c9570a6191507edb4d46e1ae7..4162e5d74208dbea7d4ba0e10e7e92d1a39fcd51 100644
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java
@@ -1,6 +1,6 @@
-package com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback;
+package com.example.imagesteganographylibrary.Text.AsyncTaskCallback;
-import com.ayush.imagesteganographylibrary.Text.ImageSteganography;
+import com.example.imagesteganographylibrary.Text.ImageSteganography;
/**
* This the callback interface for TextDecoding AsyncTask.
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java
similarity index 51%
rename from ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java
rename to imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java
index 3d65d24dcc0a42fca24275b19c71358c2570f5b5..070916ca756a57fd8dbbcc15ca3d563321147f72 100644
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java
@@ -1,6 +1,10 @@
-package com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback;
+package com.example.imagesteganographylibrary.Text.AsyncTaskCallback;
-import com.ayush.imagesteganographylibrary.Text.ImageSteganography;
+
+import com.example.imagesteganographylibrary.Text.ImageSteganography;
+import ohos.media.image.PixelMap;
+
+import java.util.List;
/**
* This the callback interface for TextEncoding AsyncTask.
@@ -11,5 +15,4 @@ public interface TextEncodingCallback {
void onStartTextEncoding();
void onCompleteTextEncoding(ImageSteganography result);
-
}
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/EncodeDecode.java
similarity index 72%
rename from ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java
rename to imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/EncodeDecode.java
index 1ae5904ae5936a4dcc23494e54f7dc5c2e611b01..1d41a15fb3b1928eb18a333f5e03488f4167c887 100644
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/EncodeDecode.java
@@ -1,20 +1,20 @@
-package com.ayush.imagesteganographylibrary.Text;
-
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.util.Log;
-
-import com.ayush.imagesteganographylibrary.Utils.Utility;
-
-import java.nio.charset.Charset;
+package com.example.imagesteganographylibrary.Text;
+
+import com.example.imagesteganographylibrary.Utils.MergePixelMap;
+import com.example.imagesteganographylibrary.Utils.Utility;
+import ohos.agp.utils.Color;
+import ohos.media.image.PixelMap;
+import ohos.media.image.common.PixelFormat;
+import ohos.media.image.common.Position;
+import ohos.media.image.common.Rect;
+import ohos.media.image.common.Size;
+
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
-class EncodeDecode {
-
- private static final String TAG = EncodeDecode.class.getName();
- //start and end message constants
+public class EncodeDecode {
private static final String END_MESSAGE_COSTANT = "#!@";
private static final String START_MESSAGE_COSTANT = "@!#";
private static final int[] binary = {16, 8, 0};
@@ -24,20 +24,16 @@ class EncodeDecode {
/**
* This method represent the core of 2 bit Encoding
*
- * @return : byte encoded pixel array
- * @parameter : integer_pixel_array {The integer RGB array}
- * @parameter : image_columns {Image width}
- * @parameter : image_rows {Image height}
- * @parameter : messageEncodingStatus {object}
- * @parameter : progressHandler {A handler interface, for the progress bar}
+ * @param integer_pixel_array {The integer RGB array}
+ * @param image_columns {Image width}
+ * @param image_rows {Image height}
+ * @param messageEncodingStatus {object}
+ * @return byte encoded pixel array
*/
-
private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns, int image_rows,
- MessageEncodingStatus messageEncodingStatus, ProgressHandler progressHandler) {
-
+ MessageEncodingStatus messageEncodingStatus) {
//denotes RGB channels
int channels = 3;
-
int shiftIndex = 4;
//creating result byte_array
@@ -63,55 +59,39 @@ class EncodeDecode {
% toShift.length]) & 0x3));// 6
if (shiftIndex % toShift.length == 0) {
-
messageEncodingStatus.incrementMessageIndex();
-
- if (progressHandler != null)
- progressHandler.increment(1);
-
+// if (progressHandler != null)
+// progressHandler.increment(1);
}
if (messageEncodingStatus.getCurrentMessageIndex() == messageEncodingStatus.getByteArrayMessage().length) {
-
messageEncodingStatus.setMessageEncoded();
-
- if (progressHandler != null)
- progressHandler.finished();
-
+// if (progressHandler != null)
+// progressHandler.finished();
}
} else {
//Simply copy the integer to result array
tmp = (byte) ((((integer_pixel_array[element] >> binary[channelIndex]) & 0xFF)));
}
-
result[resultIndex++] = tmp;
-
}
-
}
-
}
-
-
return result;
-
}
/**
* This method implements the above method on the list of chunk image list.
*
- * @return : Encoded list of chunk images
- * @parameter : splitted_images {list of chunk images}
- * @parameter : encrypted_message {string}
- * @parameter : progressHandler {Progress bar handler}
+ * @param splitted_images {list of chunk images}
+ * @param encrypted_message {string}
+ * @param progressHandler {Progress bar handler}
+ * @return Encoded list of chunk images
*/
- public static List encodeMessage(List splitted_images,
- String encrypted_message, ProgressHandler progressHandler) {
-
+ public static List encodeMessage(List splitted_images,
+ String encrypted_message, ProgressHandler progressHandler) {
//Making result method
-
- List result = new ArrayList<>(splitted_images.size());
-
+ List result = new ArrayList<>(splitted_images.size());
//Adding start and end message constants to the encrypted message
encrypted_message = encrypted_message + END_MESSAGE_COSTANT;
@@ -119,77 +99,80 @@ class EncodeDecode {
//getting byte array from string
- byte[] byte_encrypted_message = encrypted_message.getBytes(Charset.forName("ISO-8859-1"));
+ byte[] byte_encrypted_message = encrypted_message.getBytes(StandardCharsets.ISO_8859_1);
//Message Encoding Status
MessageEncodingStatus message = new MessageEncodingStatus(byte_encrypted_message, encrypted_message);
//Progress Handler
if (progressHandler != null) {
- progressHandler.setTotal(encrypted_message.getBytes(Charset.forName("ISO-8859-1")).length);
+ progressHandler.setTotal(encrypted_message.getBytes(StandardCharsets.ISO_8859_1).length);
}
- //Just a log to get the byte message length
- Log.i(TAG, "Message length " + byte_encrypted_message.length);
-
- for (Bitmap bitmap : splitted_images) {
-
+ for (MergePixelMap.PixelMapSlice pixelmap : splitted_images) {
if (!message.isMessageEncoded()) {
- //getting bitmap height and width
- int width = bitmap.getWidth();
- int height = bitmap.getHeight();
-
//Making 1D integer pixel array
- int[] oneD = new int[width * height];
- bitmap.getPixels(oneD, 0, width, 0, 0, width, height);
+ int width1 = pixelmap.getWidth();
+ int height1 = pixelmap.getHeight();
+
+ int[] oneD = new int[width1 * height1];
+ Rect R = new Rect(0, 0, width1, height1);
+ pixelmap.getPixelMap().readPixels(oneD, 0, width1, R);
//getting bitmap density
- int density = bitmap.getDensity();
+ int density = pixelmap.getPixelMap().getBaseDensity();
//encoding image
- byte[] encodedImage = encodeMessage(oneD, width, height, message, progressHandler);
+ byte[] encodedImage = encodeMessage(oneD, width1, height1, message);
//converting byte_image_array to integer_array
int[] oneDMod = Utility.byteArrayToIntArray(encodedImage);
//creating bitmap from encrypted_image_array
- Bitmap encoded_Bitmap = Bitmap.createBitmap(width, height,
- Bitmap.Config.ARGB_8888);
- encoded_Bitmap.setDensity(density);
+ PixelMap.InitializationOptions options = new PixelMap.InitializationOptions();
+ options.pixelFormat = PixelFormat.ARGB_8888;
+ options.size = new Size(width1, height1);
+ options.editable = true;
+ PixelMap encoded_Pixelmap = PixelMap.create(options);
+ encoded_Pixelmap.setBaseDensity(density);
int masterIndex = 0;
//setting pixel values of above bitmap
- for (int j = 0; j < height; j++)
- for (int i = 0; i < width; i++) {
-
- encoded_Bitmap.setPixel(i, j, Color.argb(0xFF,
+ for (int j = 0; j < height1; j++)
+ for (int i = 0; i < width1; i++) {
+ encoded_Pixelmap.writePixel(new Position(i, j), Color.argb(0xFF,
oneDMod[masterIndex] >> 16 & 0xFF,
oneDMod[masterIndex] >> 8 & 0xFF,
oneDMod[masterIndex++] & 0xFF));
-
}
-
- result.add(encoded_Bitmap);
-
+ result.add(new MergePixelMap.PixelMapSlice(width1, height1, encoded_Pixelmap));
} else {
//Just add the image chunk to the result
- result.add(bitmap.copy(bitmap.getConfig(), false));
+ result.add(pixelmap);
}
}
-
return result;
}
+ //Progress handler class
+ public interface ProgressHandler {
+
+ void setTotal(int tot);
+
+ void increment(int inc);
+
+ void finished();
+ }
+
/**
* This is the decoding method of 2 bit encoding.
*
- * @return : Void
- * @parameter : byte_pixel_array {The byte array image}
- * @parameter : image_columns {Image width}
- * @parameter : image_rows {Image height}
- * @parameter : messageDecodingStatus {object}
+ * @param byte_pixel_array byte[]
+ * @param image_columns int
+ * @param image_rows int
+ * @param messageDecodingStatus MessageDecodingStatus
*/
private static void decodeMessage(byte[] byte_pixel_array, int image_columns,
int image_rows, MessageDecodingStatus messageDecodingStatus) {
@@ -204,7 +187,6 @@ class EncodeDecode {
for (byte aByte_pixel_array : byte_pixel_array) {
-
//get last two bits from byte_pixel_array
tmp = (byte) (tmp | ((aByte_pixel_array << toShift[shiftIndex
% toShift.length]) & andByte[shiftIndex++ % toShift.length]));
@@ -216,12 +198,10 @@ class EncodeDecode {
//converting byte value to string
byte[] nonso = {byte_encrypted_message.elementAt(byte_encrypted_message.size() - 1)};
- String str = new String(nonso, Charset.forName("ISO-8859-1"));
+ String str = new String(nonso, StandardCharsets.ISO_8859_1);
if (messageDecodingStatus.getMessage().endsWith(END_MESSAGE_COSTANT)) {
-
- Log.i("TEST", "Decoding ended");
-
+// Log.i("TEST", "Decoding ended");
//fixing ISO-8859-1 decoding
byte[] temp = new byte[byte_encrypted_message.size()];
@@ -229,7 +209,7 @@ class EncodeDecode {
temp[index] = byte_encrypted_message.get(index);
- String stra = new String(temp, Charset.forName("ISO-8859-1"));
+ String stra = new String(temp, StandardCharsets.ISO_8859_1);
messageDecodingStatus.setMessage(stra.substring(0, stra.length() - 1));
@@ -268,28 +248,27 @@ class EncodeDecode {
} catch (Exception e) {
e.printStackTrace();
}
-
-
}
/**
* This method takes the list of encoded chunk images and decodes it.
*
- * @return : encrypted message {String}
- * @parameter : encodedImages {list of encode chunk images}
+ * @param encodedImages List
+ * @return encrypted message {String}
*/
-
- public static String decodeMessage(List encodedImages) {
+ public static String decodeMessage(List encodedImages) {
//Creating object
MessageDecodingStatus messageDecodingStatus = new MessageDecodingStatus();
- for (Bitmap bit : encodedImages) {
+ for (MergePixelMap.PixelMapSlice bit : encodedImages) {
int[] pixels = new int[bit.getWidth() * bit.getHeight()];
- bit.getPixels(pixels, 0, bit.getWidth(), 0, 0, bit.getWidth(),
+ Rect rt = new Rect(0, 0, bit.getWidth(),
bit.getHeight());
+ bit.getPixelMap().readPixels(pixels, 0, bit.getWidth(), rt);
+
byte[] b;
b = Utility.convertArray(pixels);
@@ -299,37 +278,26 @@ class EncodeDecode {
if (messageDecodingStatus.isEnded())
break;
}
-
return messageDecodingStatus.getMessage();
}
/**
* Calculate the numbers of pixel needed
*
+ * @param message String
* @return : The number of pixel {integer}
- * @parameter : message {Message to encode}
*/
public static int numberOfPixelForMessage(String message) {
int result = -1;
if (message != null) {
message += END_MESSAGE_COSTANT;
message = START_MESSAGE_COSTANT + message;
- result = message.getBytes(Charset.forName("ISO-8859-1")).length * 4 / 3;
+ result = message.getBytes(StandardCharsets.ISO_8859_1).length * 4 / 3;
}
return result;
}
- //Progress handler class
- public interface ProgressHandler {
-
- void setTotal(int tot);
-
- void increment(int inc);
-
- void finished();
- }
-
private static class MessageDecodingStatus {
private String message;
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/ImageSteganography.java
similarity index 72%
rename from ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java
rename to imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/ImageSteganography.java
index e8bfdcfda38fe77bdd16225c9f77a66563be76f2..43096ed9674f23b137c0e8143b1a475dfd55f607 100644
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/ImageSteganography.java
@@ -1,10 +1,12 @@
-package com.ayush.imagesteganographylibrary.Text;
+package com.example.imagesteganographylibrary.Text;
-import android.graphics.Bitmap;
-import android.util.Log;
-import com.ayush.imagesteganographylibrary.Utils.Crypto;
-import com.ayush.imagesteganographylibrary.Utils.Utility;
+import com.example.imagesteganographylibrary.Utils.Crypto;
+import com.example.imagesteganographylibrary.Utils.Utility;
+import ohos.media.image.PixelMap;
+import ohos.media.image.common.PixelFormat;
+import ohos.media.image.common.Size;
+
/**
* This main class of the text steganography
@@ -17,48 +19,52 @@ public class ImageSteganography {
private String message;
private String secret_key;
private String encrypted_message;
- private Bitmap image;
- private Bitmap encoded_image;
+ private PixelMap image;
+ private PixelMap encoded_image;
private byte[] encrypted_zip;
private Boolean encoded;
private Boolean decoded;
private Boolean secretKeyWrong;
+ private PixelMap encoded_imax;
+
public ImageSteganography() {
+ PixelMap.InitializationOptions options = new PixelMap.InitializationOptions();
+ options.pixelFormat = PixelFormat.ARGB_8888;
+ options.size = new Size(600, 600);
this.encoded = false;
this.decoded = false;
this.secretKeyWrong = true;
this.message = "";
this.secret_key = "";
this.encrypted_message = "";
- this.image = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888);
- this.encoded_image = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888);
+ this.image = PixelMap.create(options);
+ this.encoded_image = PixelMap.create(options);
this.encrypted_zip = new byte[0];
}
- public ImageSteganography(String message, String secret_key, Bitmap image) {
-
+ public ImageSteganography(String message, String secret_key, PixelMap image) {
+ PixelMap.InitializationOptions opts = new PixelMap.InitializationOptions();
+ opts.pixelFormat = PixelFormat.ARGB_8888;
+ opts.size = new Size(600, 600);
this.message = message;
this.secret_key = convertKeyTo128bit(secret_key);
this.image = image;
- /*try {
- this.encrypted_zip = Zipping.compress(message);
- } catch (Exception e) {
- e.printStackTrace();
- } */
-
this.encrypted_zip = message.getBytes();
this.encrypted_message = encryptMessage(message, this.secret_key);
-
this.encoded = false;
this.decoded = false;
this.secretKeyWrong = true;
- this.encoded_image = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888);
+ this.encoded_image = PixelMap.create(opts);
}
- public ImageSteganography(String secret_key, Bitmap image) {
+ public ImageSteganography(String secret_key, PixelMap image) {
+
+ PixelMap.InitializationOptions opts1 = new PixelMap.InitializationOptions();
+ opts1.pixelFormat = PixelFormat.ARGB_8888;
+ opts1.size = new Size(600, 600);
this.secret_key = convertKeyTo128bit(secret_key);
this.image = image;
@@ -68,13 +74,11 @@ public class ImageSteganography {
this.message = "";
this.encrypted_message = "";
- this.encoded_image = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888);
+ this.encoded_image = PixelMap.create(opts1);
this.encrypted_zip = new byte[0];
}
private static String encryptMessage(String message, String secret_key) {
- Log.d(TAG, "Message : " + message);
-
String encrypted_message = "";
if (message != null) {
if (!Utility.isStringEmpty(secret_key)) {
@@ -87,9 +91,6 @@ public class ImageSteganography {
encrypted_message = message;
}
}
-
- Log.d(TAG, "Encrypted_message : " + encrypted_message);
-
return encrypted_message;
}
@@ -100,7 +101,7 @@ public class ImageSteganography {
try {
decrypted_message = Crypto.decryptMessage(message, secret_key);
} catch (Exception e) {
- Log.d(TAG, "Error : " + e.getMessage() + " , may be due to wrong key.");
+// Log.d(TAG, "Error : " + e.getMessage() + " , may be due to wrong key.");
}
} else {
decrypted_message = message;
@@ -122,16 +123,15 @@ public class ImageSteganography {
result = new StringBuilder(result.substring(0, 15));
}
- Log.d(TAG, "Secret Key Length : " + result.toString().getBytes().length);
-
return result.toString();
}
- public Bitmap getEncoded_image() {
+ public PixelMap getEncoded_image() {
return encoded_image;
}
- public void setEncoded_image(Bitmap encoded_image) {
+ public void setEncoded_image(PixelMap encoded_image) {
+
this.encoded_image = encoded_image;
}
@@ -151,14 +151,6 @@ public class ImageSteganography {
this.secret_key = secret_key;
}
- public byte[] getEncrypted_zip() {
- return encrypted_zip;
- }
-
- public void setEncrypted_zip(byte[] encrypted_zip) {
- this.encrypted_zip = encrypted_zip;
- }
-
public String getEncrypted_message() {
return encrypted_message;
}
@@ -167,11 +159,11 @@ public class ImageSteganography {
this.encrypted_message = encrypted_message;
}
- public Bitmap getImage() {
+ public PixelMap getImage() {
return image;
}
- public void setImage(Bitmap image) {
+ public void setImage(PixelMap image) {
this.image = image;
}
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/TextDecoding.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/TextDecoding.java
new file mode 100644
index 0000000000000000000000000000000000000000..f26574541ee82f3f31d3fd0285191d03d84ed8ba
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/TextDecoding.java
@@ -0,0 +1,95 @@
+package com.example.imagesteganographylibrary.Text;
+
+
+import com.example.imagesteganographylibrary.Text.AsyncTaskCallback.TextDecodingCallback;
+import com.example.imagesteganographylibrary.Utils.ImageUtil;
+import com.example.imagesteganographylibrary.Utils.MergePixelMap;
+import com.example.imagesteganographylibrary.Utils.Utility;
+import ohos.agp.window.dialog.CommonDialog;
+import ohos.app.Context;
+import ohos.app.dispatcher.TaskDispatcher;
+import ohos.media.image.PixelMap;
+
+import java.util.List;
+
+/**
+ * In this class all those method in EncodeDecode class are used to decode secret message in image.
+ * All the tasks will run in background.
+ */
+
+public class TextDecoding {
+
+ private ImageSteganography result;
+ private TextDecodingCallback textDecodingCallback;
+ TaskDispatcher taskDispatcher;
+
+ /**
+ * TextDecoding
+ *
+ * @param abilitySlice abilitySlice
+ * @param textDecodingCallback textDecodingCallback
+ */
+ public TextDecoding(Context abilitySlice, TextDecodingCallback textDecodingCallback) {
+ super();
+ this.textDecodingCallback = textDecodingCallback;
+ this.result = new ImageSteganography();
+ taskDispatcher = abilitySlice.getMainTaskDispatcher();
+ }
+
+ /**
+ * TextDecoding
+ *
+ * @param abilitySlice abilitySlice
+ */
+ public TextDecoding(Context abilitySlice) {
+ super();
+ //making result object
+ this.result = new ImageSteganography();
+ taskDispatcher = abilitySlice.getMainTaskDispatcher();
+ }
+
+ /**
+ * TextDecoding
+ *
+ * @param imageSteganographies imageSteganographies
+ */
+ public void doInBackground(ImageSteganography imageSteganographies) {
+ textDecodingCallback.onStartTextEncoding();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ ImageSteganography imageSteganography = imageSteganographies;
+ //getting bitmap image from file
+ PixelMap bitmap = imageSteganography.getImage();
+ //splitting images
+ List srcEncodedList = Utility.splitImage(bitmap);
+ //decoding encrypted zipped message
+ String decoded_message = EncodeDecode.decodeMessage(srcEncodedList);
+ //text decoded = true
+ if (Utility.isStringEmpty(decoded_message)) {
+ decoded_message = ImageUtil.getFileName();
+ }
+
+ if (!Utility.isStringEmpty(decoded_message)) {
+ result.setDecoded(true);
+ }
+ //decrypting the encoded message
+ String decrypted_message = ImageSteganography.decryptMessage(decoded_message, imageSteganography.getSecret_key());
+ //If decrypted_message is null it means that the secret key is wrong otherwise secret key is right.
+ if (!Utility.isStringEmpty(decrypted_message)) {
+ //secret key provided is right
+ result.setSecretKeyWrong(false);
+ result.setMessage(decrypted_message);
+ for (MergePixelMap.PixelMapSlice bitm : srcEncodedList)
+ bitm.getPixelMap().release();
+ }
+ taskDispatcher.asyncDispatch(new Runnable() {
+ @Override
+ public void run() {
+ textDecodingCallback.onCompleteTextEncoding(result);
+ }
+ });
+ }
+ }).start();
+ }
+}
\ No newline at end of file
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/TextEncoding.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/TextEncoding.java
new file mode 100644
index 0000000000000000000000000000000000000000..52865a8f07927c4cd6572f29a733568581b4e70e
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Text/TextEncoding.java
@@ -0,0 +1,108 @@
+package com.example.imagesteganographylibrary.Text;
+
+import com.example.imagesteganographylibrary.Text.AsyncTaskCallback.TextEncodingCallback;
+import com.example.imagesteganographylibrary.Utils.MergePixelMap;
+import com.example.imagesteganographylibrary.Utils.Utility;
+import ohos.agp.components.ProgressBar;
+import ohos.agp.window.dialog.CommonDialog;
+import ohos.agp.window.dialog.ToastDialog;
+import ohos.agp.window.service.DisplayManager;
+import ohos.app.Context;
+import ohos.app.dispatcher.TaskDispatcher;
+import ohos.eventhandler.EventHandler;
+import ohos.eventhandler.InnerEvent;
+import ohos.media.image.PixelMap;
+
+import java.util.List;
+
+/**
+ * In this class all those method in EncodeDecode class are used to encode secret message in image.
+ * All the tasks will run in background.
+ */
+public class TextEncoding {
+ private final ImageSteganography result;
+ private final TextEncodingCallback callbackInterface;
+ private final CommonDialog progressDialog;
+ TaskDispatcher taskDispatcher;
+
+ /**
+ * TextEncoding
+ *
+ * @param abilitySlice abilitySlice
+ * @param callbackInterface callbackInterface
+ * @param progressBar progressBar
+ */
+ public TextEncoding(Context abilitySlice, TextEncodingCallback callbackInterface, ProgressBar progressBar) {
+ super();
+ this.progressDialog = new CommonDialog(abilitySlice);
+ this.callbackInterface = callbackInterface;
+ this.result = new ImageSteganography();
+ taskDispatcher = abilitySlice.getMainTaskDispatcher();
+ }
+
+ /**
+ * TextEncoding
+ *
+ * @param abilitySlice abilitySlice
+ * @param callbackInterface callbackInterface
+ */
+ public TextEncoding(Context abilitySlice, TextEncodingCallback callbackInterface) {
+ super();
+ this.progressDialog = new CommonDialog(abilitySlice);
+ this.callbackInterface = callbackInterface;
+ this.result = new ImageSteganography();
+ taskDispatcher = abilitySlice.getMainTaskDispatcher();
+ }
+
+ /**
+ * TextEncoding
+ *
+ * @param imageSteganography imageSteganography
+ */
+ public void inBack(ImageSteganography imageSteganography) {
+ callbackInterface.onStartTextEncoding();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ ImageSteganography textStegnography = imageSteganography;
+ //getting image bitmap
+ PixelMap pixelMap = textStegnography.getImage();
+ int originalWidth = pixelMap.getImageInfo().size.width;
+ int originalHeight = pixelMap.getImageInfo().size.height;
+ //splitting bitmap
+ List src_list = Utility.splitImage(pixelMap);
+
+ //encoding encrypted compressed message into image
+ List encoded_list = EncodeDecode.encodeMessage(src_list, textStegnography.getEncrypted_message(), new EncodeDecode.ProgressHandler() {
+ @Override
+ public void setTotal(int tot) {
+ System.out.println("progress:" + tot);
+ }
+
+ @Override
+ public void increment(int inc) {
+
+ }
+
+ @Override
+ public void finished() {
+ }
+ });
+
+ // merging the split encoded image
+ PixelMap srcEncoded = Utility.mergeImage(encoded_list, originalHeight, originalWidth);
+ //free Memory
+ for (MergePixelMap.PixelMapSlice bitm : src_list)
+ bitm.getPixelMap().release();
+ result.setEncoded_image(srcEncoded);
+ result.setEncoded(true);
+ taskDispatcher.asyncDispatch(new Runnable() {
+ @Override
+ public void run() {
+ callbackInterface.onCompleteTextEncoding(result);
+ }
+ });
+ }
+ }).start();
+ }
+}
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/Crypto.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/Crypto.java
new file mode 100644
index 0000000000000000000000000000000000000000..61c48bd37adf4361c57aea7b62209bee6429527c
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/Crypto.java
@@ -0,0 +1,67 @@
+package com.example.imagesteganographylibrary.Utils;
+
+import ohos.hiviewdfx.HiLog;
+import ohos.hiviewdfx.HiLogLabel;
+
+import javax.crypto.Cipher;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+
+public class Crypto {
+ private static HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP,0x001,"Crypto");
+ private static String aesKeys = "AES";
+
+ /**
+ * encryptMessage
+ *
+ * @param message String
+ * @param secret_key String
+ * @return Encrypted Message {String}
+ */
+ public static String encryptMessage(String message, String secret_key) {
+ // Creating key and cipher
+ SecretKeySpec aesKey = new SecretKeySpec(secret_key.getBytes(), "AES");
+ Cipher cipher;
+ byte[] encrypted = new byte[0];
+ //AES cipher
+ try {
+ cipher = Cipher.getInstance(aesKeys);
+ cipher.init(Cipher.ENCRYPT_MODE, aesKey);
+ encrypted = cipher.doFinal(message.getBytes());
+ } catch (Exception e) {
+ HiLog.error(logLabel,e.getMessage());
+ }
+
+ return Base64.getUrlEncoder().encodeToString(encrypted);
+ }
+
+ /**
+ * decryptMessage
+ *
+ * @param secret_key secret_key
+ * @param encrypted_message encrypted_message
+ * @return Message {String}
+ */
+ public static String decryptMessage(String encrypted_message, String secret_key) {
+ SecretKeySpec aesKey = new SecretKeySpec(secret_key.getBytes(), "AES");
+ Cipher cipher;
+ String decrypted = "";
+ byte[] decoded;
+
+ // decrypting the text
+ try {
+ //AES cipher
+ cipher = Cipher.getInstance(aesKeys);
+ cipher.init(Cipher.DECRYPT_MODE, aesKey);
+ decoded = Base64.getUrlDecoder().decode(encrypted_message.getBytes());
+ decrypted = new String(cipher.doFinal(decoded));
+ } catch (Exception e) {
+ HiLog.error(logLabel,e.getMessage());
+ }
+
+ return decrypted;
+ }
+}
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/ImageUtil.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/ImageUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9863eae9d65387783ec4ce99923bd355ac5adbe
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/ImageUtil.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain an copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.imagesteganographylibrary.Utils;
+
+import ohos.aafwk.ability.DataAbilityHelper;
+import ohos.aafwk.ability.DataAbilityRemoteException;
+import ohos.app.Context;
+import ohos.data.resultset.ResultSet;
+import ohos.hiviewdfx.HiLog;
+import ohos.hiviewdfx.HiLogLabel;
+import ohos.media.image.ImageSource;
+import ohos.media.image.PixelMap;
+import ohos.media.image.common.PixelFormat;
+import ohos.media.photokit.metadata.AVStorage;
+import ohos.utils.net.Uri;
+
+import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
+
+/**
+ * uri转pixmap
+ *
+ * @ProjectName: Image-Steganography-Library
+ * @ClassName: ImageUtil
+ * @Description: uri to pixmap
+ * @Author: lr
+ * @CreateDate: 2021/5/7 15:19
+ * @since 2021-05-07
+ */
+public class ImageUtil {
+ private static HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP,0x001,"ImageUtil");
+ private static String fileName = "";
+
+ private ImageUtil() {
+ }
+
+ /**
+ * uri to pixmap
+ *
+ * @param context mContext
+ * @param path uri
+ * @param type 0 or 1
+ * @return pixelMap
+ */
+ public static PixelMap getPixMap(Context context, Uri path, int type) {
+ PixelMap pixelMap = null;
+ DataAbilityHelper helper = DataAbilityHelper.creator(context);
+ ImageSource.SourceOptions options = new ImageSource.SourceOptions();
+ try {
+ FileDescriptor fileDescriptor = helper.openFile(path, "r");
+ ImageSource source = ImageSource.create(fileDescriptor, options);
+ ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
+ decodingOptions.desiredPixelFormat = PixelFormat.ARGB_8888;
+ pixelMap = source.createPixelmap(decodingOptions);
+ if (type == 1) {
+ new Thread() {
+ @Override
+ public void run() {
+ super.run();
+ try {
+ // columns为null,查询记录所有字段,当前例子表示查询id字段
+ ResultSet resultSet = helper.query(path, null, null);
+ while (resultSet != null && resultSet.goToNextRow()) {
+ // 获取id字段的值
+ int column = resultSet.getColumnIndexForName(AVStorage.Images.Media.DISPLAY_NAME);
+ String name = resultSet.getString(column);
+ getFileName(name);
+ }
+ } catch (DataAbilityRemoteException e) {
+ HiLog.error(logLabel,e.getMessage());
+ }
+ }
+ }.start();
+ }
+ } catch (DataAbilityRemoteException e) {
+ HiLog.error(logLabel,e.getMessage());
+ } catch (FileNotFoundException e) {
+ HiLog.error(logLabel,e.getMessage());
+ }
+ return pixelMap;
+ }
+
+ /**
+ * uri
+ *
+ * @param uri uri
+ * @return uri
+ */
+ public static Uri getPath(Uri uri) {
+ String path;
+ StringBuilder stringBuilder = new StringBuilder();
+ path = uri.toString();
+ String str1 = path.substring(0, path.indexOf("media"));
+ String str2 = path.substring(str1.length(), path.length());
+ stringBuilder.append("dataability://" + "/").append(str2);
+
+ return Uri.parse(stringBuilder.toString());
+ }
+
+ /**
+ * get fileName
+ *
+ * @param name fileName
+ */
+ public static void getFileName(String name) {
+ if (name != null && name.contains("#") || name.contains("==")) {
+ setFileName(name.substring(0, name.indexOf("#")));
+ }
+ }
+
+ public static String getFileName() {
+ return fileName;
+ }
+
+ public static void setFileName(String fileName) {
+ ImageUtil.fileName = fileName;
+ }
+}
+
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/MergePixelMap.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/MergePixelMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c424bc3a4775844f0af63d5687096daaa57d677
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/MergePixelMap.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain an copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.imagesteganographylibrary.Utils;
+
+import ohos.media.image.PixelMap;
+import ohos.media.image.common.Position;
+import java.util.List;
+/**
+ * MergePixelMap
+ *
+ * @ProjectName: Image-Steganography-Library
+ * @ClassName: MergePixelMap
+ * @Description: pixeMap 合并
+ * @Author: lr
+ * @CreateDate: 2021/5/7 15:19
+ * @since 2021-05-07
+ *
+ */
+public class MergePixelMap {
+ private MergePixelMap() {
+ }
+
+ /**
+ * list merge pixelMap
+ *
+ * @param list pixelmapList
+ * @param col col
+ * @param opts PixelMap.InitializationOptions
+ * @return pixelMap
+ */
+ public static PixelMap getMergePixelmap(List list, int col, PixelMap.InitializationOptions opts) {
+ int width = opts.size.width;
+ int height = opts.size.height;
+ int sum = width * height;
+ int[] colors = new int[sum];
+ int offsetWidth = 0;
+ int offsetHeight = 0;
+ for (int il = 0; il < list.size(); il++) {
+ PixelMapSlice pixelMapSlice = list.get(il);
+ if (il % col == 0) {
+ offsetWidth = 0;
+ if (il != 0) {
+ offsetHeight += list.get(il - 1).height;
+ }
+ } else {
+ offsetWidth += list.get(il - 1).width;
+ }
+ for (int jl = 0; jl < pixelMapSlice.height; jl++) {
+ for (int kl = 0; kl < pixelMapSlice.width; kl++) {
+ int index = kl + width * jl + offsetWidth + offsetHeight * width;
+ colors[index] = pixelMapSlice.pixelMap.readPixel(new Position(kl, jl));
+ }
+ }
+ }
+ return PixelMap.create(colors, opts);
+ }
+
+ /**
+ * PixelMapSlice
+ *
+ * @ProjectName: Image-Steganography-Library
+ * @ClassName: PixelMapSlice
+ * @Description: 自定义pixelMap
+ * @Author: lr
+ * @CreateDate: 2021/5/7 15:19
+ * @since 2021-05-07
+ */
+ public static class PixelMapSlice {
+ PixelMap pixelMap;
+ int width;
+ int height;
+ /**
+ * create PixelMapSlice
+ *
+ * @param width width
+ * @param height height
+ * @param pixelMap pixelMap
+ */
+ public PixelMapSlice(int width, int height, PixelMap pixelMap) {
+ this.width = width;
+ this.height = height;
+ this.pixelMap = pixelMap;
+ }
+ public PixelMap getPixelMap() {
+ return pixelMap;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+ /**
+ * create PixelMapSlice
+ *
+ * @param width width
+ * @param height height
+ * @param pixelMap pixelMap
+ * @return PixelMapSlice
+ */
+ public static PixelMapSlice create(int width, int height, PixelMap pixelMap) {
+ return new PixelMapSlice(width, height, pixelMap);
+ }
+ }
+}
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/ResUtils.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/ResUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..17e001f68682d8163e066425af811485e141240d
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/ResUtils.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain an copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.imagesteganographylibrary.Utils;
+import ohos.agp.colors.RgbColor;
+import ohos.agp.components.element.ShapeElement;
+import ohos.app.Context;
+import ohos.global.resource.NotExistException;
+import ohos.global.resource.ResourceManager;
+import ohos.global.resource.WrongTypeException;
+import ohos.hiviewdfx.HiLog;
+import ohos.hiviewdfx.HiLogLabel;
+import java.io.IOException;
+
+
+/**
+ * 资源工具类
+ *
+ * @author:hello
+ * @since 2021-04-25
+ */
+public class ResUtils {
+ private static final String TAG = "ResUtil";
+ private static final int CONSTANT = 160;
+
+ private ResUtils() {
+ }
+
+ /**
+ * vp转px
+ *
+ * @param context 上下文
+ * @param vp vp
+ * @return px
+ */
+ public static int vpToPx(Context context, float vp) {
+ return (int) (context.getResourceManager().getDeviceCapability().screenDensity / CONSTANT * vp);
+ }
+
+ /**
+ * px转vp
+ *
+ * @param context 上下文
+ * @param px px
+ * @return vp
+ */
+ public static int pxTovp(Context context, float px) {
+ return (int) (px / (context.getResourceManager().getDeviceCapability().screenDensity / CONSTANT));
+ }
+
+ /**
+ * 获取屏幕的宽
+ *
+ * @param context 上下文
+ * @return 屏幕的宽,单位px
+ */
+ public static int getScreenWidth(Context context) {
+ return vpToPx(context, context.getResourceManager().getDeviceCapability().width);
+ }
+
+ /**
+ * 获取屏幕的高
+ *
+ * @param context 上下文
+ * @return 屏幕的高,单位px
+ */
+ public static int getScreenHeight(Context context) {
+ return vpToPx(context, context.getResourceManager().getDeviceCapability().height);
+ }
+
+ /**
+ * get string
+ *
+ * @param context the context
+ * @param id the string id
+ * @return string of the given id
+ */
+ public static String getString(Context context, int id) {
+ String result = "";
+ if (context == null) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0,
+ new ResUtils().getClass().getName()), "getString -> get null context");
+ return result;
+ }
+ ResourceManager manager = context.getResourceManager();
+ if (manager == null) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0,
+ new ResUtils().getClass().getName()), "getString -> get null ResourceManager");
+ return result;
+ }
+ try {
+ result = manager.getElement(id).getString();
+ } catch (IOException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getString -> IOException");
+ } catch (NotExistException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getString -> NotExistException");
+ } catch (WrongTypeException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getString -> WrongTypeException");
+ }
+ return result;
+ }
+
+ /**
+ * get the string array
+ *
+ * @param context the context
+ * @param id the string array id
+ * @return the string array
+ */
+ public static String[] getStringArray(Context context, int id) {
+ String[] result = null;
+ if (context == null) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getStringArray -> get null context");
+ return result;
+ }
+ ResourceManager manager = context.getResourceManager();
+ if (manager == null) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getStringArray -> get null ResourceManager");
+ return result;
+ }
+ try {
+ result = manager.getElement(id).getStringArray();
+ } catch (IOException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getStringArray -> IOException");
+ } catch (NotExistException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getStringArray -> NotExistException");
+ } catch (WrongTypeException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getStringArray -> WrongTypeException");
+ }
+ return result;
+ }
+
+ /**
+ * get the int
+ *
+ * @param context the context
+ * @param id the int array
+ * @return the int array
+ */
+ public static int getInt(Context context, int id) {
+ int result = 0;
+ if (context == null) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getInt -> get null context");
+ return result;
+ }
+ ResourceManager manager = context.getResourceManager();
+ if (manager == null) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getInt -> get null ResourceManager");
+ return result;
+ }
+ try {
+ result = manager.getElement(id).getInteger();
+ } catch (IOException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getInt -> IOException");
+ } catch (NotExistException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getInt -> NotExistException");
+ } catch (WrongTypeException e) {
+ HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0, new ResUtils().getClass().getName()),
+ "getInt -> WrongTypeException");
+ }
+ return result;
+ }
+
+ /**
+ * 颜色值rgba转换为ShapeElement
+ *
+ * @param rgbaColor 颜色值
+ * @return ShapeElement
+ */
+ public static ShapeElement getShapeElement8(int rgbaColor) {
+ ShapeElement shapeElement = new ShapeElement();
+ shapeElement.setRgbColor(new RgbColor(rgbaColor));
+ return shapeElement;
+ }
+}
diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/Utility.java
similarity index 63%
rename from ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java
rename to imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/Utility.java
index d0016c50438f86151b274bfd37f0ad1b31c56a7e..c7f3d2e7b08e4d7d1a26c0a1d3727144b160f296 100644
--- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/Utils/Utility.java
@@ -1,27 +1,20 @@
-package com.ayush.imagesteganographylibrary.Utils;
-
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.util.Log;
+package com.example.imagesteganographylibrary.Utils;
+import ohos.media.image.PixelMap;
+import ohos.media.image.common.PixelFormat;
+import ohos.media.image.common.Rect;
+import ohos.media.image.common.Size;
import java.util.ArrayList;
import java.util.List;
-/*
-This is the Utility Class containing some useful methods
- */
public class Utility {
-
- //Taking the square block size constant
private static final int SQUARE_BLOCK_SIZE = 512;
- private final static String TAG = Utility.class.getName();
/**
* This method calculates the number of square block needed
*
- * @return : number of Square blocks {Integer}
- * @parameter : number of pixels {Integer}
+ * @param pixels int
+ * @return number of Square blocks {Integer}
*/
public static int squareBlockNeeded(int pixels) {
int result;
@@ -38,32 +31,28 @@ public class Utility {
/**
* This method splits the image into many images of ( SQUARE_BLOCK_SIZE * SQUARE_BLOCK_SIZE ) size.
*
- * @return : List of splitted images {List}
- * @parameter : Image {Bitmap}
+ * @param pixelmap pixelmap
+ * @return List of splitted images {List}
*/
- public static List splitImage(Bitmap bitmap) {
+ public static List splitImage(PixelMap pixelmap) {
//For height and width of the small image chunks
int chunkHeight, chunkWidth;
//To store all the small image chunks in bitmap format in this list
- ArrayList chunkedImages = new ArrayList<>();
+ ArrayList chunkedImages = new ArrayList<>();
// Assume like a matrix in which the element is a Small Square block
//Rows and columns of that matrix
- int rows = bitmap.getHeight() / SQUARE_BLOCK_SIZE;
- int cols = bitmap.getWidth() / SQUARE_BLOCK_SIZE;
-
- int chunk_height_mod = bitmap.getHeight() % SQUARE_BLOCK_SIZE;
- int chunk_width_mod = bitmap.getWidth() % SQUARE_BLOCK_SIZE;
+ int rows = pixelmap.getImageInfo().size.height / SQUARE_BLOCK_SIZE;
+ int cols = pixelmap.getImageInfo().size.width / SQUARE_BLOCK_SIZE;
+ int chunk_height_mod = pixelmap.getImageInfo().size.height % SQUARE_BLOCK_SIZE;
+ int chunk_width_mod = pixelmap.getImageInfo().size.width % SQUARE_BLOCK_SIZE;
if (chunk_height_mod > 0)
rows++;
if (chunk_width_mod > 0)
cols++;
-
-
- //x_coordinate and y_coordinate are the pixel positions of the image chunks
int y_coordinate = 0;
for (int x = 0; x < rows; x++) {
@@ -81,32 +70,35 @@ public class Utility {
if (x == rows - 1 && chunk_height_mod > 0)
chunkHeight = chunk_height_mod;
+
//Adding chunk images to the list
- chunkedImages.add(Bitmap.createBitmap(bitmap, x_coordinate, y_coordinate, chunkWidth, chunkHeight));
+ Rect R = new Rect(x_coordinate, y_coordinate, chunkWidth, chunkHeight);
+ PixelMap.InitializationOptions options = new PixelMap.InitializationOptions();
+ options.size = new Size(chunkWidth, chunkHeight);
+ options.pixelFormat = PixelFormat.ARGB_8888;
+ options.editable = true;
+ PixelMap pixelMap = PixelMap.create(pixelmap, R, options);
+ chunkedImages.add(MergePixelMap.PixelMapSlice.create(chunkWidth, chunkHeight, pixelMap));
x_coordinate += SQUARE_BLOCK_SIZE;
-
}
-
y_coordinate += SQUARE_BLOCK_SIZE;
-
}
-
- //returning the list
return chunkedImages;
}
/**
* This method merge all the chunk image list into one single image
*
+ * @param original_height int
+ * @param original_width int
+ * @param pixelMaps List pixelMaps
* @return : Merged Image {Bitmap}
- * @parameter : List {Bitmap}, Original Height {Integer}, Original Width {Integer}
*/
- public static Bitmap mergeImage(List images, int original_height, int original_width) {
+ public static PixelMap mergeImage(List pixelMaps, int original_height, int original_width) {
//Calculating number of Rows and columns of that matrix
int rows = original_height / SQUARE_BLOCK_SIZE;
int cols = original_width / SQUARE_BLOCK_SIZE;
-
int chunk_height_mod = original_height % SQUARE_BLOCK_SIZE;
int chunk_width_mod = original_width % SQUARE_BLOCK_SIZE;
@@ -114,50 +106,25 @@ public class Utility {
rows++;
if (chunk_width_mod > 0)
cols++;
-
- //create a bitmap of a size which can hold the complete image after merging
- Log.d(TAG, "Size width " + original_width + " size height " + original_height);
- Bitmap bitmap = Bitmap.createBitmap(original_width, original_height, Bitmap.Config.ARGB_4444);
-
- //Creating canvas
- Canvas canvas = new Canvas(bitmap);
-
- int count = 0;
-
- for (int irows = 0; irows < rows; irows++) {
- for (int icols = 0; icols < cols; icols++) {
-
- //Drawing all the chunk images of canvas
- canvas.drawBitmap(images.get(count), (SQUARE_BLOCK_SIZE * icols), (SQUARE_BLOCK_SIZE * irows), new Paint());
- count++;
-
- }
- }
-
- //returning bitmap
- return bitmap;
+ PixelMap.InitializationOptions options = new PixelMap.InitializationOptions();
+ options.size = new Size(original_width, original_height);
+ options.pixelFormat = PixelFormat.ARGB_8888;
+ //options.editable = false;
+ return MergePixelMap.getMergePixelmap(pixelMaps, cols, options);
}
/**
* This method converts the byte array to an integer array.
*
+ * @param b byte[]
* @return : Integer Array
- * @parameter : b {the byte array}
*/
public static int[] byteArrayToIntArray(byte[] b) {
-
- Log.v("Size byte array", b.length + "");
-
int size = b.length / 3;
-
- Log.v("Size Int array", size + "");
-
System.runFinalization();
//Garbage collection
System.gc();
-
- Log.v("FreeMemory", Runtime.getRuntime().freeMemory() + "");
int[] result = new int[size];
int offset = 0;
int index = 0;
@@ -173,20 +140,19 @@ public class Utility {
/**
* Convert the byte array to an int.
*
- * @return : Integer
- * @parameter : b {the byte array}
+ * @param b byte[]
+ * @return Integer
*/
public static int byteArrayToInt(byte[] b) {
-
return byteArrayToInt(b, 0);
-
}
/**
* Convert the byte array to an int starting from the given offset.
*
- * @return : Integer
- * @parameter : b {the byte array}, offset {integer}
+ * @param b byte[]
+ * @param offset int
+ * @return Integer
*/
private static int byteArrayToInt(byte[] b, int offset) {
@@ -204,10 +170,10 @@ public class Utility {
/**
* Convert integer array representing [argb] values to byte array
- * representing [rgb] values
*
+ * representing [rgb] values
+ * @param array array
* @return : byte Array representing [rgb] values.
- * @parameter : Integer array representing [argb] values.
*/
public static byte[] convertArray(int[] array) {
@@ -227,8 +193,8 @@ public class Utility {
/**
* This method is used to check whether the string is empty of not
*
+ * @param str str
* @return : true or false {boolean}
- * @parameter : String
*/
public static boolean isStringEmpty(String str) {
boolean result = true;
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/view/CircleView.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/view/CircleView.java
new file mode 100644
index 0000000000000000000000000000000000000000..c697598ed675dd012d838fb2a4a292111c989cdf
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/view/CircleView.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright (C) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain an copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.imagesteganographylibrary.view;
+
+import ohos.agp.animation.Animator;
+import ohos.agp.animation.AnimatorValue;
+import ohos.agp.components.AttrSet;
+import ohos.agp.components.Component;
+import ohos.agp.render.Arc;
+import ohos.agp.render.Canvas;
+import ohos.agp.render.Paint;
+import ohos.agp.utils.Color;
+import ohos.agp.utils.RectFloat;
+import ohos.app.Context;
+
+import static ohos.agp.animation.Animator.CurveType.LINEAR;
+
+/**
+ * uri转pixmap
+ *
+ * @ProjectName: Image-Steganography-Library
+ * @ClassName: CircleView
+ * @Description: CircleView
+ * @Author: lr
+ * @CreateDate: 2021/5/7 15:19
+ * @since 2021-05-07
+ */
+public class CircleView extends Component implements Component.EstimateSizeListener, Component.DrawTask,
+ Animator.StateChangedListener, Animator.LoopedListener {
+ /**
+ * INFINITE
+ */
+ public static final int INFINITE = -1;
+ RectFloat rectF = new RectFloat();
+ private final int strokeWidth = 12;
+ private final int rgbAlpha = 200;
+ private final int rgbRed = 255;
+ private final int rgbGreen = 20;
+ private final int rgbBlue = 147;
+ private final int drawCircle = 2;
+ private final float sweepAngle = 100;
+ private final float padding = 5;
+ private final int angle = 360;
+ /**
+ * valueAnimator
+ */
+ private AnimatorValue valueAnimator;
+ private Paint mPaint;
+ private Paint mPaintPro;
+
+ private float mWidth = 0f;
+ private float mPadding = 0f;
+ private float startAngle = 0f;
+
+
+ /**
+ * CircleView
+ *
+ * @param context context
+ */
+ public CircleView(Context context) {
+ this(context, null);
+ }
+
+ /**
+ * CircleView
+ *
+ * @param context context
+ * @param attrs attrs
+ */
+ public CircleView(Context context, AttrSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ /**
+ * CircleView
+ *
+ * @param context context
+ * @param attrs attrs
+ * @param defStyleAttr defStyleAttr
+ */
+ public CircleView(Context context, AttrSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initPaint();
+ }
+
+
+ private void initPaint() {
+ addDrawTask(this);
+ setEstimateSizeListener(this);
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setStyle(Paint.Style.STROKE_STYLE);
+ mPaint.setColor(Color.WHITE);
+ mPaint.setStrokeWidth(strokeWidth);
+
+ mPaintPro = new Paint();
+ mPaintPro.setAntiAlias(true);
+ mPaintPro.setStyle(Paint.Style.STROKE_STYLE);
+ mPaintPro.setColor(new Color(Color.argb(rgbAlpha, rgbRed, rgbGreen, rgbBlue)));
+ mPaintPro.setStrokeWidth(strokeWidth);
+
+ }
+
+ /**
+ * setViewColor
+ *
+ * @param color color
+ */
+ public void setViewColor(int color) {
+ mPaintPro.setColor(new Color(color));
+ invalidate();
+ }
+
+ /**
+ * setBarColor
+ *
+ * @param color color
+ */
+ public void setBarColor(int color) {
+ mPaint.setColor(new Color(color));
+ invalidate();
+ }
+
+ @Override
+ public void onDraw(Component component, Canvas canvas) {
+ canvas.drawCircle(mWidth / drawCircle, mWidth / drawCircle, mWidth / drawCircle - mPadding, mPaintPro);
+ rectF = new RectFloat(mPadding, mPadding, mWidth - mPadding, mWidth - mPadding);
+ canvas.drawArc(rectF, new Arc(startAngle, sweepAngle, false), mPaint);
+ }
+
+ @Override
+ public boolean onEstimateSize(int i, int i1) {
+ if (EstimateSpec.getSize(i) > getHeight()) {
+ mWidth = EstimateSpec.getSize(i1);
+ } else {
+ mWidth = EstimateSpec.getSize(i);
+ }
+ mPadding = padding;
+ return false;
+ }
+
+
+
+ private AnimatorValue startViewAnim(float startF, final float endF, long time) {
+ valueAnimator = new AnimatorValue();
+ valueAnimator.setDuration(time);
+ valueAnimator.setCurveType(LINEAR);
+ valueAnimator.setLoopedCount(INFINITE);
+
+ valueAnimator.setStateChangedListener(this);
+ valueAnimator.setLoopedListener(this);
+ valueAnimator.setValueUpdateListener((animatorValue, value) -> {
+ startAngle = angle * value;
+
+ invalidate();
+ });
+
+
+ if (!valueAnimator.isRunning()) {
+ valueAnimator.start();
+
+ }
+
+ return valueAnimator;
+ }
+
+ /**
+ * startAnim
+ *
+ * @param time time
+ */
+ public void startAnim(int time) {
+ stopAnim();
+ startViewAnim(0f, 1f, time);
+ }
+
+ /**
+ * stopAnim
+ */
+ public void stopAnim() {
+ if (valueAnimator != null) {
+ createAnimatorProperty().reset();
+ valueAnimator.setLoopedCount(0);
+ valueAnimator.cancel();
+ valueAnimator.end();
+ }
+ }
+
+
+ @Override
+ public void onRepeat(Animator animator) {
+
+ }
+
+ @Override
+ public void onStart(Animator animator) {
+
+ }
+
+ @Override
+ public void onStop(Animator animator) {
+
+ }
+
+ @Override
+ public void onCancel(Animator animator) {
+
+ }
+
+ @Override
+ public void onEnd(Animator animator) {
+
+ }
+
+ @Override
+ public void onPause(Animator animator) {
+
+ }
+
+ @Override
+ public void onResume(Animator animator) {
+
+ }
+}
diff --git a/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/view/ProgressDialog.java b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/view/ProgressDialog.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6d0b3a6391b5c80aa8a536315f600bbe11dae6e
--- /dev/null
+++ b/imagesteganographylibrary/src/main/java/com/example/imagesteganographylibrary/view/ProgressDialog.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2021 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain an copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.imagesteganographylibrary.view;
+
+import com.example.imagesteganographylibrary.ResourceTable;
+import com.example.imagesteganographylibrary.Utils.ResUtils;
+import com.example.imagesteganographylibrary.Utils.Utility;
+import ohos.agp.components.Component;
+import ohos.agp.components.DirectionalLayout;
+import ohos.agp.components.LayoutScatter;
+import ohos.agp.components.Text;
+import ohos.agp.window.dialog.CommonDialog;
+import ohos.app.Context;
+
+/**
+ * ProgressDialog
+ *
+ * @ProjectName: Image-Steganography-Library
+ * @ClassName: ProgressDialog
+ * @Description: ProgressDialog
+ * @Author: lr
+ * @CreateDate: 2021/5/7 15:19
+ * @since 2021-05-07
+ */
+public class ProgressDialog extends CommonDialog {
+ private final int animTime = 500;
+ private final double widths = 0.9;
+ private Text tvIndex;
+ private Text tvTitle;
+
+ /**
+ * ProgressDialog
+ *
+ * @param context context
+ */
+ public ProgressDialog(Context context) {
+ super(context);
+ init(context);
+ }
+
+ /**
+ * init
+ *
+ * @param context context
+ */
+ private void init(Context context) {
+ Component dialogView = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_loading_dialog,
+ null, true);
+ setContentCustomComponent(dialogView);
+ CircleView circleView = (CircleView) dialogView.findComponentById(ResourceTable.Id_circleView);
+ circleView.startAnim(animTime);
+ tvIndex = (Text) dialogView.findComponentById(ResourceTable.Id_tv_item);
+ tvTitle = (Text) dialogView.findComponentById(ResourceTable.Id_tv_title);
+ setContentCustomComponent(dialogView);
+ setSize((int) (ResUtils.getScreenWidth(context) * widths), DirectionalLayout.LayoutConfig.MATCH_CONTENT);
+ setTransparent(false);
+ setAutoClosable(true);
+ }
+
+ /**
+ * showDialog
+ *
+ * @param title title
+ * @param content content
+ */
+ public void showDialog(String title, String content) {
+ if (!Utility.isStringEmpty(title)) {
+ tvTitle.setText(title);
+ }
+ if (!Utility.isStringEmpty(content)) {
+ tvIndex.setText(content);
+ }
+ show();
+ }
+
+ /**
+ * hideDialog
+ */
+ public void hideDialog() {
+ if (isShowing()) {
+ destroy();
+ }
+ }
+}
diff --git a/imagesteganographylibrary/src/main/resources/base/element/string.json b/imagesteganographylibrary/src/main/resources/base/element/string.json
new file mode 100644
index 0000000000000000000000000000000000000000..69588e9ca0a0929549899fadb5f7414c1f76392e
--- /dev/null
+++ b/imagesteganographylibrary/src/main/resources/base/element/string.json
@@ -0,0 +1,8 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "imagesteganographylibrary"
+ }
+ ]
+}
diff --git a/imagesteganographylibrary/src/main/resources/base/layout/loading_dialog.xml b/imagesteganographylibrary/src/main/resources/base/layout/loading_dialog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..974cd88848e5bbde15ba2625835ab300247b1757
--- /dev/null
+++ b/imagesteganographylibrary/src/main/resources/base/layout/loading_dialog.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/imagesteganographylibrary/src/test/java/com/example/imagesteganographylibrary/ExampleTest.java b/imagesteganographylibrary/src/test/java/com/example/imagesteganographylibrary/ExampleTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7348cd1f8344bc78b87eb13145a37a064dc026bf
--- /dev/null
+++ b/imagesteganographylibrary/src/test/java/com/example/imagesteganographylibrary/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.imagesteganographylibrary;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/settings.gradle b/settings.gradle
index 6c5e7bff08d0a3bf5a8ac7fa515a612e5d498942..c8d8bcbd5d27626a5b5acd448381620d7a330e85 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':ImageSteganographyLibrary'
+include ':entry', ':imagesteganographylibrary'