From 30744f2f6e7fd4079d4c81ffd35289b192ed4875 Mon Sep 17 00:00:00 2001 From: Kraity Date: Mon, 13 Feb 2023 21:25:29 +0800 Subject: [PATCH] test: update testcase of Android --- .editorconfig | 7 +- android-test/app/build.gradle | 15 +- android-test/app/src/main/AndroidManifest.xml | 12 +- android-test/app/src/main/assets/eishay.json | 33 ++ .../app/src/main/ic_launcher-playstore.png | Bin 0 -> 42428 bytes .../fastjson2/android/MainActivity.java | 406 ++++++++++-------- .../drawable-v24/ic_launcher_foreground.xml | 30 -- .../app/src/main/res/drawable/btn.xml | 9 + .../res/drawable/ic_launcher_background.xml | 170 -------- .../app/src/main/res/layout/activity_main.xml | 240 +++++------ .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2043 bytes .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1404 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3393 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4047 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2898 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1276 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 982 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1996 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2419 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1772 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2928 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1900 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5098 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5998 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3918 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4976 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2884 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 9396 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 9984 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5914 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7316 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3844 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 15322 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 14900 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7778 -> 0 bytes .../app/src/main/res/values-night/themes.xml | 7 - .../app/src/main/res/values/colors.xml | 13 +- .../app/src/main/res/values/themes.xml | 15 +- android-test/build.gradle | 6 +- android-test/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- 43 files changed, 443 insertions(+), 539 deletions(-) create mode 100644 android-test/app/src/main/assets/eishay.json create mode 100644 android-test/app/src/main/ic_launcher-playstore.png delete mode 100644 android-test/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 android-test/app/src/main/res/drawable/btn.xml delete mode 100644 android-test/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 android-test/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 android-test/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 android-test/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android-test/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 android-test/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 android-test/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 android-test/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 android-test/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android-test/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 android-test/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 android-test/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 android-test/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 android-test/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android-test/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 android-test/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 android-test/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 android-test/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 android-test/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android-test/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 android-test/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 android-test/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 android-test/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 android-test/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android-test/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 android-test/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 android-test/app/src/main/res/values-night/themes.xml diff --git a/.editorconfig b/.editorconfig index 191189ba4..53a4241f9 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,8 +14,11 @@ ij_continuation_indent_size = 8 ij_java_doc_align_exception_comments = false ij_java_doc_align_param_comments = false -[*.{yaml,yml,sh,ps1}] +[*.{yaml, yml, sh, ps1}] indent_size = 2 -[*.{md,mkd,markdown}] +[*.{md, mkd, markdown}] trim_trailing_whitespace = false + +[{**/res/**.xml, **/AndroidManifest.xml}] +ij_continuation_indent_size = 4 diff --git a/android-test/app/build.gradle b/android-test/app/build.gradle index 6a19ba5da..ba3666c8a 100644 --- a/android-test/app/build.gradle +++ b/android-test/app/build.gradle @@ -4,15 +4,14 @@ plugins { } android { - compileSdk 32 + compileSdk 31 defaultConfig { applicationId "com.alibaba.fastjson2.android" minSdk 26 - targetSdk 26 + targetSdk 29 versionCode 1 versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -22,11 +21,15 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - namespace 'com.alibaba.fastjson2.android' + + buildFeatures { + viewBinding true + } } dependencies { @@ -41,7 +44,9 @@ dependencies { implementation 'com.google.code.gson:gson:2.10.1' implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.1' testImplementation 'junit:junit:5.8.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' -} \ No newline at end of file +} diff --git a/android-test/app/src/main/AndroidManifest.xml b/android-test/app/src/main/AndroidManifest.xml index 6c10807bc..6ef2a431c 100644 --- a/android-test/app/src/main/AndroidManifest.xml +++ b/android-test/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ - + + android:theme="@style/AppTheme"> + android:configChanges="orientation|screenSize|screenLayout" + android:exported="true" + android:launchMode="singleTask" + android:theme="@style/SplashTheme"> @@ -19,4 +23,4 @@ - \ No newline at end of file + diff --git a/android-test/app/src/main/assets/eishay.json b/android-test/app/src/main/assets/eishay.json new file mode 100644 index 000000000..08eed7916 --- /dev/null +++ b/android-test/app/src/main/assets/eishay.json @@ -0,0 +1,33 @@ +{ + "images": [ + { + "height": 768, + "size": "LARGE", + "title": "Javaone Keynote", + "uri": "http://javaone.com/keynote_large.jpg", + "width": 1024 + }, + { + "height": 240, + "size": "SMALL", + "title": "Javaone Keynote", + "uri": "http://javaone.com/keynote_small.jpg", + "width": 320 + } + ], + "media": { + "bitrate": 262144, + "duration": 18000000, + "format": "video/mpg4", + "height": 480, + "persons": [ + "Bill Gates", + "Steve Jobs" + ], + "player": "JAVA", + "size": 58982400, + "title": "Javaone Keynote", + "uri": "http://javaone.com/keynote.mpg", + "width": 640 + } +} diff --git a/android-test/app/src/main/ic_launcher-playstore.png b/android-test/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..199dd2131d99a3726cab35f73d38dd013a3e09d1 GIT binary patch literal 42428 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 tester; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ActivityMainBinding inflate = + ActivityMainBinding.inflate( + getLayoutInflater() + ); + setContentView(inflate.getRoot()); - CART_STR = readString("cart.json"); - HOMEPAGE_STR = readString("homepage.json"); - H5API_STR = readString("h5api.json"); + int white = getResources().getColor( + R.color.white, null + ); - setContentView(R.layout.activity_main); - } + CheckBox[] libBoxes = new CheckBox[LIB_NAMES.length]; + for (int i = 0; i < LIB_NAMES.length; i++) { + CheckBox box = new CheckBox(this); + libBoxes[i] = box; + box.setChecked(i == 0); + box.setTag(LIB_NAMES[i]); + box.setText(LIB_NAMES[i]); + box.setTextColor(white); + inflate.libs.addView(box); + } - private String readString(String path) { - StringBuffer buffer = new StringBuffer(); - AssetManager assets = getApplicationContext().getAssets(); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(assets.open(path), "utf-8"))) { - String line; - while ((line = reader.readLine()) != null) { - buffer.append(line); + RadioButton[] tagRadios = new RadioButton[TAG_NAMES.length]; + for (int i = 0; i < TAG_NAMES.length; i++) { + RadioButton radio = new RadioButton(this); + tagRadios[i] = radio; + radio.setTag(TAG_NAMES[i]); + radio.setText(TAG_NAMES[i]); + radio.setTextColor(white); + inflate.tags.addView(radio); + } + + RadioButton[] itemRadios = new RadioButton[ITEM_NAMES.length]; + for (int i = 0; i < ITEM_NAMES.length; i++) { + RadioButton radio = new RadioButton(this); + itemRadios[i] = radio; + radio.setTag(ITEM_NAMES[i]); + radio.setText(ITEM_NAMES[i]); + radio.setTextColor(white); + inflate.items.addView(radio); + } + + byte[] buffer = new byte[2048]; + ByteArrayOutputStream stream = new ByteArrayOutputStream(5120); + + String[] paths = { + "eishay.json", "cart.json", "homepage.json", "h5api.json" + }; + for (int i = 0; i < texts.length; i++) { + try (InputStream in = getResources().getAssets().open(paths[i]) + ) { + int size; + stream.reset(); + while ((size = in.read(buffer)) != -1) { + stream.write(buffer, 0, size); + } + } catch (Exception e) { + Log.d("Error getting resource", e.getMessage()); + } finally { + try { + texts[i] = stream.toString("UTF-8"); + } catch (UnsupportedEncodingException e) { + Log.d("Error getting resource", e.getMessage()); + } } - } catch (Exception e) { - Log.d("fastjson", e.getMessage()); } - return buffer.toString(); - } - private void appendInfo(String str) { - TextView textView10 = findViewById(R.id.textView); - String text = textView10.getText().toString(); - if (text.isEmpty()) { - text = str; - } else { - text = text + "\n" + str; + gson = new Gson(); + tester = new HashMap<>(); + mapper = new ObjectMapper(); + + { + Map> tags = new HashMap<>(); + tester.put("fastjson2", tags); + { + Map items = new HashMap<>(); + tags.put("SERDE", items); + items.put("eishay", this::fastjson2EishaySerde); + } + { + Map items = new HashMap<>(); + tags.put("PARSE", items); + for (int i = 0; i < ITEM_NAMES.length; i++) { + String text = texts[i]; + String item = ITEM_NAMES[i]; + items.put(item, () -> fastjson2Parse(text, item)); + } + } } - textView10.setText(text); - } + { + Map> tags = new HashMap<>(); + tester.put("fastjson1", tags); + { + Map items = new HashMap<>(); + tags.put("SERDE", items); + items.put("eishay", this::fastjson1EishaySerde); + } + { + Map items = new HashMap<>(); + tags.put("PARSE", items); + for (int i = 0; i < ITEM_NAMES.length; i++) { + String text = texts[i]; + String item = ITEM_NAMES[i]; + items.put(item, () -> fastjson1Parse(text, item)); + } + } + } + + { + Map> tags = new HashMap<>(); + tester.put("gson", tags); + { + Map items = new HashMap<>(); + tags.put("SERDE", items); + items.put("eishay", this::gsonEishaySerde); + } + } + + { + Map> tags = new HashMap<>(); + tester.put("jackson", tags); + { + Map items = new HashMap<>(); + tags.put("SERDE", items); + items.put("eishay", this::jacksonEishaySerde); + } + } + + Runnable updater = () -> inflate.result.setText(result); + ExecutorService executor = Executors.newCachedThreadPool(); + + Consumer consumer = + runnable -> executor.execute(() -> { + runnable.run(); + runOnUiThread(updater); + }); + Function target = radios -> { + for (RadioButton btn : radios) { + if (btn.isChecked()) { + return btn.getTag(); + + } + } + return null; + }; + + inflate.submit.setOnClickListener(v -> { + final Object tag = target.apply(tagRadios); + final Object item = target.apply(itemRadios); + + if (tag == null || item == null) { + Toast.makeText(this, "Unselected", Toast.LENGTH_SHORT).show(); + return; + } + + result.setLength(0); + inflate.result.setText( + result.append(tag).append(" ").append(item).append("\n\n") + ); + + Toast.makeText(this, "Testing", Toast.LENGTH_SHORT).show(); + for (CheckBox box : libBoxes) { + if (box.isChecked()) { + Optional.ofNullable(tester.get(box.getTag())) + .map((tags -> tags.get(tag))).map((items) -> items.get(item)).ifPresent(consumer); + } + } + }); + } public void fastjson1EishaySerde() { - MediaContent mediaContent = JSON.parseObject(EISHAY_STR, MediaContent.class); + MediaContent mediaContent = JSON.parseObject(texts[0], MediaContent.class); long toStringTotal; { long start = System.currentTimeMillis(); @@ -76,17 +236,19 @@ public class MainActivity extends AppCompatActivity { { long start = System.currentTimeMillis(); for (int i = 0; i < SERDE_LOOP_COUNT; i++) { - com.alibaba.fastjson.JSON.parseObject(EISHAY_STR, MediaContent.class); + com.alibaba.fastjson.JSON.parseObject(texts[0], MediaContent.class); } parseObjectTotal = System.currentTimeMillis() - start; } - appendInfo("fastjson1 serde : " + toStringTotal + ", " + parseObjectTotal); + synchronized (result) { + result.append("fastjson1 serde : ").append(toStringTotal).append(", ").append(parseObjectTotal).append("\n"); + } } public void fastjson2EishaySerde() { - MediaContent mediaContent = JSON.parseObject(EISHAY_STR, MediaContent.class); + MediaContent mediaContent = JSON.parseObject(texts[0], MediaContent.class); long toStringTotal; { @@ -101,42 +263,46 @@ public class MainActivity extends AppCompatActivity { { long start = System.currentTimeMillis(); for (int i = 0; i < SERDE_LOOP_COUNT; i++) { - JSON.parseObject(EISHAY_STR, MediaContent.class); + JSON.parseObject(texts[0], MediaContent.class); } parseObjectTotal = System.currentTimeMillis() - start; } - appendInfo("fastjson2 serde : " + toStringTotal + ", " + parseObjectTotal); + synchronized (result) { + result.append("fastjson2 serde : ").append(toStringTotal).append(", ").append(parseObjectTotal).append("\n"); + } } public void gsonEishaySerde() { - MediaContent mediaContent = JSON.parseObject(EISHAY_STR, MediaContent.class); + MediaContent mediaContent = JSON.parseObject(texts[0], MediaContent.class); long start = System.currentTimeMillis(); for (int i = 0; i < SERDE_LOOP_COUNT; i++) { - g.toJson(mediaContent); + gson.toJson(mediaContent); } long toStringTotal = System.currentTimeMillis() - start; start = System.currentTimeMillis(); for (int i = 0; i < SERDE_LOOP_COUNT; i++) { - g.fromJson(EISHAY_STR, MediaContent.class); + gson.fromJson(texts[0], MediaContent.class); } long parseObjectTotal = System.currentTimeMillis() - start; - appendInfo("gson serde : " + toStringTotal + ", " + parseObjectTotal); + synchronized (result) { + result.append("gson serde : ").append(toStringTotal).append(", ").append(parseObjectTotal).append("\n"); + } } public void jacksonEishaySerde() { - MediaContent mediaContent = JSON.parseObject(EISHAY_STR, MediaContent.class); + MediaContent mediaContent = JSON.parseObject(texts[0], MediaContent.class); try { long toStringTotal; { long start = System.currentTimeMillis(); for (int i = 0; i < SERDE_LOOP_COUNT; i++) { - objectMapper.writeValueAsString(mediaContent); + mapper.writeValueAsString(mediaContent); } toStringTotal = System.currentTimeMillis() - start; } @@ -145,38 +311,18 @@ public class MainActivity extends AppCompatActivity { { long start = System.currentTimeMillis(); for (int i = 0; i < SERDE_LOOP_COUNT; i++) { - objectMapper.readValue(EISHAY_STR, MediaContent.class); + mapper.readValue(texts[0], MediaContent.class); } parseObjectTotal = System.currentTimeMillis() - start; } - appendInfo("jackson serde : " + toStringTotal + ", " + parseObjectTotal); + synchronized (result) { + result.append("jackson serde : ").append(toStringTotal).append(", ").append(parseObjectTotal).append("\n"); + } } catch (Exception e) { - Log.d("fastjson", e.getMessage()); - } - } - - public void fastjson1Serde(View view) { - if (((RadioButton) findViewById(R.id.eishaySerde)).isChecked()) { - fastjson1EishaySerde(); - } - } - - public void fastjson2Serde(View view) { - if (((RadioButton) findViewById(R.id.eishaySerde)).isChecked()) { - fastjson2EishaySerde(); - } - } - - public void gsonSerde(View view) { - if (((RadioButton) findViewById(R.id.eishaySerde)).isChecked()) { - gsonEishaySerde(); - } - } - - public void jacksonSerde(View view) { - if (((RadioButton) findViewById(R.id.eishaySerde)).isChecked()) { - jacksonEishaySerde(); + synchronized (result) { + result.append("jackson error : ").append(e.getMessage()).append("\n"); + } } } @@ -186,7 +332,9 @@ public class MainActivity extends AppCompatActivity { com.alibaba.fastjson.JSON.parseObject(str); } long millis = System.currentTimeMillis() - start; - appendInfo("fastjson1 parse " + name + " : " + millis); + synchronized (result) { + result.append("fastjson1 parse ").append(name).append(" : ").append(millis).append("\n"); + } } public void fastjson2Parse(String str, String name) { @@ -195,7 +343,9 @@ public class MainActivity extends AppCompatActivity { JSON.parseObject(str); } long millis = System.currentTimeMillis() - start; - appendInfo("fastjson2 parse " + name + " : " + millis); + synchronized (result) { + result.append("fastjson2 parse ").append(name).append(" : ").append(millis).append("\n"); + } } public void orgjsonParse(String str, String name) { @@ -205,109 +355,13 @@ public class MainActivity extends AppCompatActivity { new org.json.JSONObject(str); } long millis = System.currentTimeMillis() - start; - appendInfo("orgjson parse " + name + " : " + millis); + synchronized (result) { + result.append("orgjson parse ").append(name).append(" : ").append(millis).append("\n"); + } } catch (Exception e) { - Log.d("fastjson", e.getMessage()); + synchronized (result) { + result.append("orgjson error : ").append(e.getMessage()).append("\n"); + } } } - - public void fastjson1Parse(View view) { - String str = null, name = null; - if (((RadioButton) findViewById(R.id.eishayParse)).isChecked()) { - str = EISHAY_STR; - name = "eishay"; - } else if (((RadioButton) findViewById(R.id.cartParse)).isChecked()) { - str = CART_STR; - name = "cart"; - } else if (((RadioButton) findViewById(R.id.homepageParse)).isChecked()) { - str = HOMEPAGE_STR; - name = "homepage"; - } else if (((RadioButton) findViewById(R.id.h5apiParse)).isChecked()) { - str = H5API_STR; - name = "h5api"; - } - if (str != null) { - fastjson1Parse(str, name); - } - } - - public void fastjson2Parse(View view) { - String str = null, name = null; - if (((RadioButton) findViewById(R.id.eishayParse)).isChecked()) { - str = EISHAY_STR; - name = "eishay"; - } else if (((RadioButton) findViewById(R.id.cartParse)).isChecked()) { - str = CART_STR; - name = "cart"; - } else if (((RadioButton) findViewById(R.id.homepageParse)).isChecked()) { - str = HOMEPAGE_STR; - name = "homepage"; - } else if (((RadioButton) findViewById(R.id.h5apiParse)).isChecked()) { - str = H5API_STR; - name = "h5api"; - } - if (str != null) { - fastjson2Parse(str, name); - } - } - - public void orgjsonParse(View view) { - String str = null, name = null; - if (((RadioButton) findViewById(R.id.eishayParse)).isChecked()) { - str = EISHAY_STR; - name = "eishay"; - } else if (((RadioButton) findViewById(R.id.cartParse)).isChecked()) { - str = CART_STR; - name = "cart"; - } else if (((RadioButton) findViewById(R.id.homepageParse)).isChecked()) { - str = HOMEPAGE_STR; - name = "homepage"; - } else if (((RadioButton) findViewById(R.id.h5apiParse)).isChecked()) { - str = H5API_STR; - name = "h5api"; - } - if (str != null) { - orgjsonParse(str, name); - } - } - - public void clear(View view) { - TextView textView10 = findViewById(R.id.textView); - textView10.setText(""); - } - - static final String EISHAY_STR = "{\"images\": [{\n" + - " \"height\":768,\n" + - " \"size\":\"LARGE\",\n" + - " \"title\":\"Javaone Keynote\",\n" + - " \"uri\":\"http://javaone.com/keynote_large.jpg\",\n" + - " \"width\":1024\n" + - " }, {\n" + - " \"height\":240,\n" + - " \"size\":\"SMALL\",\n" + - " \"title\":\"Javaone Keynote\",\n" + - " \"uri\":\"http://javaone.com/keynote_small.jpg\",\n" + - " \"width\":320\n" + - " }\n" + - " ],\n" + - " \"media\": {\n" + - " \"bitrate\":262144,\n" + - " \"duration\":18000000,\n" + - " \"format\":\"video/mpg4\",\n" + - " \"height\":480,\n" + - " \"persons\": [\n" + - " \"Bill Gates\",\n" + - " \"Steve Jobs\"\n" + - " ],\n" + - " \"player\":\"JAVA\",\n" + - " \"size\":58982400,\n" + - " \"title\":\"Javaone Keynote\",\n" + - " \"uri\":\"http://javaone.com/keynote.mpg\",\n" + - " \"width\":640\n" + - " }\n" + - "}"; - - static String CART_STR; - static String HOMEPAGE_STR; - static String H5API_STR; -} \ No newline at end of file +} diff --git a/android-test/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android-test/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d114..000000000 --- a/android-test/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android-test/app/src/main/res/drawable/btn.xml b/android-test/app/src/main/res/drawable/btn.xml new file mode 100644 index 000000000..cf4d9cf95 --- /dev/null +++ b/android-test/app/src/main/res/drawable/btn.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/android-test/app/src/main/res/drawable/ic_launcher_background.xml b/android-test/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9cb..000000000 --- a/android-test/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android-test/app/src/main/res/layout/activity_main.xml b/android-test/app/src/main/res/layout/activity_main.xml index 3cd843ee3..c9f9932cd 100644 --- a/android-test/app/src/main/res/layout/activity_main.xml +++ b/android-test/app/src/main/res/layout/activity_main.xml @@ -1,133 +1,121 @@ - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/dark" + android:paddingStart="20dp" + android:paddingEnd="20dp" + tools:ignore="HardcodedText"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintGuide_percent="0.8" /> - - - - -