Showing preview only (239K chars total). Download the full file or copy to clipboard to get everything.
Repository: hamidness/restring
Branch: master
Commit: fdd206cf481b
Files: 88
Total size: 215.2 KB
Directory structure:
gitextract_tfw8tuy5/
├── .gitignore
├── .travis.yml
├── README.md
├── build.gradle
├── docs/
│ ├── META-INF/
│ │ └── MANIFEST.MF
│ ├── allclasses-frame.html
│ ├── allclasses-noframe.html
│ ├── com/
│ │ └── ice/
│ │ └── restring/
│ │ ├── Restring.StringsLoader.html
│ │ ├── Restring.html
│ │ ├── RestringConfig.Builder.html
│ │ ├── RestringConfig.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ └── package-tree.html
│ ├── constant-values.html
│ ├── deprecated-list.html
│ ├── help-doc.html
│ ├── index-all.html
│ ├── index.html
│ ├── overview-tree.html
│ ├── package-list
│ ├── script.js
│ └── stylesheet.css
├── example/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── ice/
│ │ └── restring/
│ │ └── example/
│ │ ├── BaseActivity.java
│ │ ├── MainActivity.java
│ │ ├── SampleApplication.java
│ │ └── SampleStringsLoader.java
│ └── res/
│ ├── drawable/
│ │ └── ic_launcher_background.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── layout/
│ │ └── activity_main.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ └── values/
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── restring/
│ ├── .gitignore
│ ├── bintray.gradle
│ ├── build.gradle
│ ├── install.gradle
│ ├── jacoco.gradle
│ ├── proguard-rules.pro
│ ├── publish.gradle
│ └── src/
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ice/
│ │ │ └── restring/
│ │ │ ├── BottomNavigationViewTransformer.java
│ │ │ ├── CustomResourcesContextWrapper.java
│ │ │ ├── MemoryStringRepository.java
│ │ │ ├── ReflectionUtils.java
│ │ │ ├── Restring.java
│ │ │ ├── RestringConfig.java
│ │ │ ├── RestringContextWrapper.java
│ │ │ ├── RestringLayoutInflater.java
│ │ │ ├── RestringResources.java
│ │ │ ├── RestringUtil.java
│ │ │ ├── SharedPrefStringRepository.java
│ │ │ ├── StringRepository.java
│ │ │ ├── StringsLoaderTask.java
│ │ │ ├── SupportToolbarTransformer.java
│ │ │ ├── TextViewTransformer.java
│ │ │ ├── ToolbarTransformer.java
│ │ │ └── ViewTransformerManager.java
│ │ └── res/
│ │ ├── layout/
│ │ │ └── test_layout.xml
│ │ ├── menu/
│ │ │ └── test_menu.xml
│ │ └── values/
│ │ └── strings.xml
│ └── test/
│ └── java/
│ └── com/
│ └── ice/
│ └── restring/
│ ├── MemoryStringRepositoryTest.java
│ ├── RestringContextWrapperTest.java
│ ├── RestringLayoutInflaterTest.java
│ ├── RestringResourcesTest.java
│ ├── RestringTest.java
│ ├── SharedPrefStringRepositoryTest.java
│ ├── StringsLoaderTaskTest.java
│ ├── SupportToolbarTransformerTest.java
│ ├── TextViewTransformerTest.java
│ ├── ToolbarTransformerTest.java
│ ├── ViewTransformerManagerTest.java
│ ├── activity/
│ │ └── TestActivity.java
│ └── shadow/
│ ├── MyShadowAssetManager.java
│ └── MyShadowAsyncTask.java
├── settings.gradle
└── update_javadoc.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
.DS_Store
/build
/captures
.externalNativeBuild
================================================
FILE: .travis.yml
================================================
language: android
jdk: oraclejdk8
env:
global:
- ANDROID_TARGET=android-16
- ANDROID_ABI=armeabi-v7a
- BUILD_TOOLS_VERSION=27.0.3
- ANDROID_TARGET=27
android:
components:
- tools
- platform-tools
- build-tools-${BUILD_TOOLS_VERSION}
- android-${ANDROID_TARGET}
- extra-google-m2repository
- extra-android-m2repository
- sys-img-${ANDROID_ABI}-${ANDROID_TARGET}
script:
- ./gradlew build jacocoTestReport
after_success:
- bash <(curl -s https://codecov.io/bash)
================================================
FILE: README.md
================================================
<a href='https://bintray.com/hamidfri/maven/restring/_latestVersion'><img src='https://api.bintray.com/packages/hamidfri/maven/restring/images/download.svg'></a>
<a href="https://travis-ci.org/hamidness/restring"><img src="https://travis-ci.org/hamidness/restring.svg?branch=master"></a>
<a href="https://codecov.io/gh/hamidness/restring">
<img src="https://codecov.io/gh/hamidness/restring/branch/master/graph/badge.svg" />
</a>
[](http://androidweekly.net/issues/issue-307)
<a href="https://android-arsenal.com/details/1/6886"><img src="https://img.shields.io/badge/Android%20Arsenal-Restring-brightgreen.svg?style=flat" border="0" alt="Android Arsenal"></a>
### <a href="https://github.com/B3nedikt/restring">Please use this version instead, if you're going to use thie library.
</a>
## Restring 1.0
An easy way to replace bundled Strings dynamically, or provide new translations in Android
### 1. Add dependency
```groovy
implementation 'com.ice.restring:restring:1.0.0'
```
### 2. Initialize
Initialize Restring in your Application class:
```java
Restring.init(context);
```
or if you want more configurations:
```java
Restring.init(context,
new RestringConfig.Builder()
.persist(true)
.stringsLoader(new SampleStringsLoader())
.build()
);
```
### 3. Inject into Context
if you have a BaseActivity you can add this there, otherwise you have to add it to all of your activities!
```java
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(Restring.wrapContext(newBase));
}
```
### 4. Provide new Strings
There're two ways to provide new Strings. You can use either way or both.
First way: You can implement Restring.StringsLoader like this:
```java
public class MyStringsLoader implements Restring.StringsLoader {
//This will be called on background thread.
@Override
public List<String> getLanguages() {
//return your supported languages(e.g. "en", ...)
}
//This will be called on background thread.
@Override
public Map<String, String> getStrings(String language) {
Map<String, String> map = new HashMap<>();
// Load your strings here into a map of (key,value)s for this language!
return map;
}
}
```
and initialize Restring like this:
```java
Restring.init(context,
new RestringConfig.Builder()
.persist(true)
.stringsLoader(new MyStringsLoader())
.build()
);
```
Second way:
Load your Strings in any way / any time / any place and just call this:
```java
// e.g. language="en" newStrings=map of (key-value)s
Restring.setStrings(language, newStrings);
```
### 5. Done!
Now all strings in your app will be overriden by new strings provided to Restring.
## Notes:
1. Please note that Restring works with current locale, so if you change locale with
```java
Locale.setDefault(newLocale);
```
Restring will start using strings of the new locale.
2. By default, Restring will use shared preferences to save all strings provided to. So if you set a StringsLoader or call .setString() to set the strings into Restring, the strings will be there on the next application launch. In case you don't want Restring saves strings into shared preferences, you can set it in initialization, like this:
```java
Restring.init(context,
new RestringConfig.Builder()
.persist(false) //Set this to false to prevent saving into shared preferences.
.build()
);
```
3. For displaying a string, Restring tries to find that in dynamic strings, and will use bundled version as fallback. In the other words, Only the new provided strings will be overriden and for the rest the bundled version will be used.
## Limitations
1. Plurals are not supported yet.
2. String arrays are not supported yet.
## Docs
* <a href="https://medium.com/@hamidgh/dynamically-change-bundled-strings-a24b97bfd306">Medium</a>
* <a href="https://hamidness.github.io/restring/index.html">Javadocs</a>
## License
<pre>
Copyright 2018 Hamid Gharehdaghi
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
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.
</pre>
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-alpha06'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
classpath 'org.jacoco:org.jacoco.core:0.8.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext {
compileSdkVersion = 27
buildToolsVersion = '27.0.3'
minSdkVersion = 16
targetSdkVersion = 27
//Library versions
supportLibrariesVersion = '27.1.0'
deps = [
supportAppCompat: "com.android.support:appcompat-v7:$supportLibrariesVersion",
supportDesign : "com.android.support:design:$supportLibrariesVersion",
constraintLayout: "com.android.support.constraint:constraint-layout:1.0.2",
junit : 'junit:junit:4.12',
hamcrest : 'org.hamcrest:hamcrest-junit:2.0.0.0',
mockito : 'org.mockito:mockito-core:2.+',
robolectric : 'org.robolectric:robolectric:3.7.1'
]
}
================================================
FILE: docs/META-INF/MANIFEST.MF
================================================
Manifest-Version: 1.0
================================================
FILE: docs/allclasses-frame.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>All Classes (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="com/ice/restring/Restring.html" title="class in com.ice.restring" target="classFrame">Restring</a></li>
<li><a href="com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring" target="classFrame"><span class="interfaceName">Restring.StringsLoader</span></a></li>
<li><a href="com/ice/restring/RestringConfig.html" title="class in com.ice.restring" target="classFrame">RestringConfig</a></li>
<li><a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring" target="classFrame">RestringConfig.Builder</a></li>
</ul>
</div>
</body>
</html>
================================================
FILE: docs/allclasses-noframe.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>All Classes (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></li>
<li><a href="com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="interfaceName">Restring.StringsLoader</span></a></li>
<li><a href="com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a></li>
<li><a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></li>
</ul>
</div>
</body>
</html>
================================================
FILE: docs/com/ice/restring/Restring.StringsLoader.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>Restring.StringsLoader (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Restring.StringsLoader (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/ice/restring/Restring.html" title="class in com.ice.restring"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/Restring.StringsLoader.html" target="_top">Frames</a></li>
<li><a href="Restring.StringsLoader.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.ice.restring</div>
<h2 title="Interface Restring.StringsLoader" class="title">Interface Restring.StringsLoader</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dd>
</dl>
<hr>
<br>
<pre>public static interface <span class="typeNameLabel">Restring.StringsLoader</span></pre>
<div class="block">Loader of strings skeleton. Clients can implement this interface if they want to load strings on initialization.
First the list of languages will be asked, then strings of each language.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd"> </span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>java.util.List<java.lang.String></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.StringsLoader.html#getLanguages--">getLanguages</a></span>()</code>
<div class="block">Get supported languages.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.util.Map<java.lang.String,java.lang.String></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.StringsLoader.html#getStrings-java.lang.String-">getStrings</a></span>(java.lang.String language)</code>
<div class="block">Get strings of a language as keys & values.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getLanguages--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLanguages</h4>
<pre>java.util.List<java.lang.String> getLanguages()</pre>
<div class="block">Get supported languages.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the list of languages.</dd>
</dl>
</li>
</ul>
<a name="getStrings-java.lang.String-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getStrings</h4>
<pre>java.util.Map<java.lang.String,java.lang.String> getStrings(java.lang.String language)</pre>
<div class="block">Get strings of a language as keys & values.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>language</code> - of the strings.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the strings as (key, value).</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/ice/restring/Restring.html" title="class in com.ice.restring"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/Restring.StringsLoader.html" target="_top">Frames</a></li>
<li><a href="Restring.StringsLoader.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/com/ice/restring/Restring.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>Restring (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Restring (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/Restring.html" target="_top">Frames</a></li>
<li><a href="Restring.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested.class.summary">Nested</a> | </li>
<li>Field | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.ice.restring</div>
<h2 title="Class Restring" class="title">Class Restring</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>com.ice.restring.Restring</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">Restring</span>
extends java.lang.Object</pre>
<div class="block">Entry point for Restring. it will be used for initializing Restring components, setting new strings,
wrapping activity context.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a></span></code>
<div class="block">Loader of strings skeleton.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.html#Restring--">Restring</a></span>()</code> </td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.html#init-android.content.Context-">init</a></span>(android.content.Context context)</code>
<div class="block">Initialize Restring with default configuration.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.html#init-android.content.Context-com.ice.restring.RestringConfig-">init</a></span>(android.content.Context context,
<a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a> config)</code>
<div class="block">Initialize Restring with the specified configuration.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.html#setString-java.lang.String-java.lang.String-java.lang.String-">setString</a></span>(java.lang.String language,
java.lang.String key,
java.lang.String value)</code>
<div class="block">Set a single string for a language.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.html#setStrings-java.lang.String-java.util.Map-">setStrings</a></span>(java.lang.String language,
java.util.Map<java.lang.String,java.lang.String> newStrings)</code>
<div class="block">Set strings of a language.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static android.content.ContextWrapper</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/Restring.html#wrapContext-android.content.Context-">wrapContext</a></span>(android.content.Context base)</code>
<div class="block">Wraps context of an activity to provide Restring features.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="Restring--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>Restring</h4>
<pre>public Restring()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="init-android.content.Context-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
<pre>public static void init(android.content.Context context)</pre>
<div class="block">Initialize Restring with default configuration.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - of the application.</dd>
</dl>
</li>
</ul>
<a name="init-android.content.Context-com.ice.restring.RestringConfig-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
<pre>public static void init(android.content.Context context,
<a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a> config)</pre>
<div class="block">Initialize Restring with the specified configuration.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - of the application.</dd>
<dd><code>config</code> - of the Restring.</dd>
</dl>
</li>
</ul>
<a name="wrapContext-android.content.Context-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>wrapContext</h4>
<pre>public static android.content.ContextWrapper wrapContext(android.content.Context base)</pre>
<div class="block">Wraps context of an activity to provide Restring features.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>base</code> - context of an activity.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the Restring wrapped context.</dd>
</dl>
</li>
</ul>
<a name="setStrings-java.lang.String-java.util.Map-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setStrings</h4>
<pre>public static void setStrings(java.lang.String language,
java.util.Map<java.lang.String,java.lang.String> newStrings)</pre>
<div class="block">Set strings of a language.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>language</code> - the strings are for.</dd>
<dd><code>newStrings</code> - the strings of the language.</dd>
</dl>
</li>
</ul>
<a name="setString-java.lang.String-java.lang.String-java.lang.String-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>setString</h4>
<pre>public static void setString(java.lang.String language,
java.lang.String key,
java.lang.String value)</pre>
<div class="block">Set a single string for a language.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>language</code> - the string is for.</dd>
<dd><code>key</code> - the string key.</dd>
<dd><code>value</code> - the string value.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/Restring.html" target="_top">Frames</a></li>
<li><a href="Restring.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested.class.summary">Nested</a> | </li>
<li>Field | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/com/ice/restring/RestringConfig.Builder.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>RestringConfig.Builder (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="RestringConfig.Builder (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">Prev Class</span></a></li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/RestringConfig.Builder.html" target="_top">Frames</a></li>
<li><a href="RestringConfig.Builder.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
<li>Field | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.ice.restring</div>
<h2 title="Class RestringConfig.Builder" class="title">Class RestringConfig.Builder</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>com.ice.restring.RestringConfig.Builder</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a></dd>
</dl>
<hr>
<br>
<pre>public static class <span class="typeNameLabel">RestringConfig.Builder</span>
extends java.lang.Object</pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.Builder.html#Builder--">Builder</a></span>()</code> </td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.Builder.html#build--">build</a></span>()</code> </td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.Builder.html#persist-boolean-">persist</a></span>(boolean persist)</code> </td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.Builder.html#stringsLoader-com.ice.restring.Restring.StringsLoader-">stringsLoader</a></span>(<a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a> loader)</code> </td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="Builder--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>Builder</h4>
<pre>public Builder()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="persist-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>persist</h4>
<pre>public <a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a> persist(boolean persist)</pre>
</li>
</ul>
<a name="stringsLoader-com.ice.restring.Restring.StringsLoader-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stringsLoader</h4>
<pre>public <a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a> stringsLoader(<a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a> loader)</pre>
</li>
</ul>
<a name="build--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>build</h4>
<pre>public <a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a> build()</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">Prev Class</span></a></li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/RestringConfig.Builder.html" target="_top">Frames</a></li>
<li><a href="RestringConfig.Builder.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
<li>Field | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/com/ice/restring/RestringConfig.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>RestringConfig (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="RestringConfig (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/RestringConfig.html" target="_top">Frames</a></li>
<li><a href="RestringConfig.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested.class.summary">Nested</a> | </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.ice.restring</div>
<h2 title="Class RestringConfig" class="title">Class RestringConfig</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>com.ice.restring.RestringConfig</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">RestringConfig</span>
extends java.lang.Object</pre>
<div class="block">Contains configuration properties for initializing Restring.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></span></code> </td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.html#getStringsLoader--">getStringsLoader</a></span>()</code> </td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/ice/restring/RestringConfig.html#isPersist--">isPersist</a></span>()</code> </td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="isPersist--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isPersist</h4>
<pre>public boolean isPersist()</pre>
</li>
</ul>
<a name="getStringsLoader--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getStringsLoader</h4>
<pre>public <a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a> getStringsLoader()</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/RestringConfig.html" target="_top">Frames</a></li>
<li><a href="RestringConfig.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested.class.summary">Nested</a> | </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li>Field | </li>
<li>Constr | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/com/ice/restring/package-frame.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>com.ice.restring (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<h1 class="bar"><a href="../../../com/ice/restring/package-summary.html" target="classFrame">com.ice.restring</a></h1>
<div class="indexContainer">
<h2 title="Interfaces">Interfaces</h2>
<ul title="Interfaces">
<li><a href="Restring.StringsLoader.html" title="interface in com.ice.restring" target="classFrame"><span class="interfaceName">Restring.StringsLoader</span></a></li>
</ul>
<h2 title="Classes">Classes</h2>
<ul title="Classes">
<li><a href="Restring.html" title="class in com.ice.restring" target="classFrame">Restring</a></li>
<li><a href="RestringConfig.html" title="class in com.ice.restring" target="classFrame">RestringConfig</a></li>
<li><a href="RestringConfig.Builder.html" title="class in com.ice.restring" target="classFrame">RestringConfig.Builder</a></li>
</ul>
</div>
</body>
</html>
================================================
FILE: docs/com/ice/restring/package-summary.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>com.ice.restring (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="com.ice.restring (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Package</li>
<li>Next Package</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Package" class="title">Package com.ice.restring</h1>
</div>
<div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
<caption><span>Interface Summary</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a></td>
<td class="colLast">
<div class="block">Loader of strings skeleton.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
<caption><span>Class Summary</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></td>
<td class="colLast">
<div class="block">Entry point for Restring.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a></td>
<td class="colLast">
<div class="block">Contains configuration properties for initializing Restring.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></td>
<td class="colLast"> </td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Package</li>
<li>Next Package</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/com/ice/restring/package-tree.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>com.ice.restring Class Hierarchy (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="com.ice.restring Class Hierarchy (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/package-tree.html" target="_top">Frames</a></li>
<li><a href="package-tree.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 class="title">Hierarchy For Package com.ice.restring</h1>
</div>
<div class="contentContainer">
<h2 title="Class Hierarchy">Class Hierarchy</h2>
<ul>
<li type="circle">java.lang.Object
<ul>
<li type="circle">com.ice.restring.<a href="../../../com/ice/restring/Restring.html" title="class in com.ice.restring"><span class="typeNameLink">Restring</span></a></li>
<li type="circle">com.ice.restring.<a href="../../../com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">RestringConfig</span></a></li>
<li type="circle">com.ice.restring.<a href="../../../com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring"><span class="typeNameLink">RestringConfig.Builder</span></a></li>
</ul>
</li>
</ul>
<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
<ul>
<li type="circle">com.ice.restring.<a href="../../../com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Restring.StringsLoader</span></a></li>
</ul>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/ice/restring/package-tree.html" target="_top">Frames</a></li>
<li><a href="package-tree.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/constant-values.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>Constant Field Values (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Constant Field Values (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
<li><a href="constant-values.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
<h2 title="Contents">Contents</h2>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
<li><a href="constant-values.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/deprecated-list.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>Deprecated List (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Deprecated List (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li class="navBarCell1Rev">Deprecated</li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
<li><a href="deprecated-list.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Deprecated API" class="title">Deprecated API</h1>
<h2 title="Contents">Contents</h2>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li class="navBarCell1Rev">Deprecated</li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
<li><a href="deprecated-list.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/help-doc.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>API Help (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="API Help (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li>
<li class="navBarCell1Rev">Help</li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
<li><a href="help-doc.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 class="title">How This API Document Is Organized</h1>
<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
</div>
<div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<h2>Package</h2>
<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
<ul>
<li>Interfaces (italic)</li>
<li>Classes</li>
<li>Enums</li>
<li>Exceptions</li>
<li>Errors</li>
<li>Annotation Types</li>
</ul>
</li>
<li class="blockList">
<h2>Class/Interface</h2>
<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
<ul>
<li>Class inheritance diagram</li>
<li>Direct Subclasses</li>
<li>All Known Subinterfaces</li>
<li>All Known Implementing Classes</li>
<li>Class/interface declaration</li>
<li>Class/interface description</li>
</ul>
<ul>
<li>Nested Class Summary</li>
<li>Field Summary</li>
<li>Constructor Summary</li>
<li>Method Summary</li>
</ul>
<ul>
<li>Field Detail</li>
<li>Constructor Detail</li>
<li>Method Detail</li>
</ul>
<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
</li>
<li class="blockList">
<h2>Annotation Type</h2>
<p>Each annotation type has its own separate page with the following sections:</p>
<ul>
<li>Annotation Type declaration</li>
<li>Annotation Type description</li>
<li>Required Element Summary</li>
<li>Optional Element Summary</li>
<li>Element Detail</li>
</ul>
</li>
<li class="blockList">
<h2>Enum</h2>
<p>Each enum has its own separate page with the following sections:</p>
<ul>
<li>Enum declaration</li>
<li>Enum description</li>
<li>Enum Constant Summary</li>
<li>Enum Constant Detail</li>
</ul>
</li>
<li class="blockList">
<h2>Tree (Class Hierarchy)</h2>
<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
<ul>
<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
</ul>
</li>
<li class="blockList">
<h2>Deprecated API</h2>
<p>The <a href="deprecated-list.html">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>
</li>
<li class="blockList">
<h2>Index</h2>
<p>The <a href="index-all.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
</li>
<li class="blockList">
<h2>Prev/Next</h2>
<p>These links take you to the next or previous class, interface, package, or related page.</p>
</li>
<li class="blockList">
<h2>Frames/No Frames</h2>
<p>These links show and hide the HTML frames. All pages are available with or without frames.</p>
</li>
<li class="blockList">
<h2>All Classes</h2>
<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
</li>
<li class="blockList">
<h2>Serialized Form</h2>
<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
</li>
<li class="blockList">
<h2>Constant Field Values</h2>
<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
</li>
</ul>
<span class="emphasizedPhrase">This help file applies to API documentation generated using the standard doclet.</span></div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li>
<li class="navBarCell1Rev">Help</li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
<li><a href="help-doc.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/index-all.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>Index (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Index (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li class="navBarCell1Rev">Index</li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
<li><a href="index-all.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="contentContainer"><a href="#I:B">B</a> <a href="#I:C">C</a> <a href="#I:G">G</a> <a href="#I:I">I</a> <a href="#I:P">P</a> <a href="#I:R">R</a> <a href="#I:S">S</a> <a href="#I:W">W</a> <a name="I:B">
<!-- -->
</a>
<h2 class="title">B</h2>
<dl>
<dt><span class="memberNameLink"><a href="com/ice/restring/RestringConfig.Builder.html#build--">build()</a></span> - Method in class com.ice.restring.<a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/RestringConfig.Builder.html#Builder--">Builder()</a></span> - Constructor for class com.ice.restring.<a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></dt>
<dd> </dd>
</dl>
<a name="I:C">
<!-- -->
</a>
<h2 class="title">C</h2>
<dl>
<dt><a href="com/ice/restring/package-summary.html">com.ice.restring</a> - package com.ice.restring</dt>
<dd> </dd>
</dl>
<a name="I:G">
<!-- -->
</a>
<h2 class="title">G</h2>
<dl>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.StringsLoader.html#getLanguages--">getLanguages()</a></span> - Method in interface com.ice.restring.<a href="com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a></dt>
<dd>
<div class="block">Get supported languages.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.StringsLoader.html#getStrings-java.lang.String-">getStrings(String)</a></span> - Method in interface com.ice.restring.<a href="com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring">Restring.StringsLoader</a></dt>
<dd>
<div class="block">Get strings of a language as keys & values.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/RestringConfig.html#getStringsLoader--">getStringsLoader()</a></span> - Method in class com.ice.restring.<a href="com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a></dt>
<dd> </dd>
</dl>
<a name="I:I">
<!-- -->
</a>
<h2 class="title">I</h2>
<dl>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.html#init-android.content.Context-">init(Context)</a></span> - Static method in class com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dt>
<dd>
<div class="block">Initialize Restring with default configuration.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.html#init-android.content.Context-com.ice.restring.RestringConfig-">init(Context, RestringConfig)</a></span> - Static method in class com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dt>
<dd>
<div class="block">Initialize Restring with the specified configuration.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/RestringConfig.html#isPersist--">isPersist()</a></span> - Method in class com.ice.restring.<a href="com/ice/restring/RestringConfig.html" title="class in com.ice.restring">RestringConfig</a></dt>
<dd> </dd>
</dl>
<a name="I:P">
<!-- -->
</a>
<h2 class="title">P</h2>
<dl>
<dt><span class="memberNameLink"><a href="com/ice/restring/RestringConfig.Builder.html#persist-boolean-">persist(boolean)</a></span> - Method in class com.ice.restring.<a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></dt>
<dd> </dd>
</dl>
<a name="I:R">
<!-- -->
</a>
<h2 class="title">R</h2>
<dl>
<dt><a href="com/ice/restring/Restring.html" title="class in com.ice.restring"><span class="typeNameLink">Restring</span></a> - Class in <a href="com/ice/restring/package-summary.html">com.ice.restring</a></dt>
<dd>
<div class="block">Entry point for Restring.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.html#Restring--">Restring()</a></span> - Constructor for class com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dt>
<dd> </dd>
<dt><a href="com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Restring.StringsLoader</span></a> - Interface in <a href="com/ice/restring/package-summary.html">com.ice.restring</a></dt>
<dd>
<div class="block">Loader of strings skeleton.</div>
</dd>
<dt><a href="com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">RestringConfig</span></a> - Class in <a href="com/ice/restring/package-summary.html">com.ice.restring</a></dt>
<dd>
<div class="block">Contains configuration properties for initializing Restring.</div>
</dd>
<dt><a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring"><span class="typeNameLink">RestringConfig.Builder</span></a> - Class in <a href="com/ice/restring/package-summary.html">com.ice.restring</a></dt>
<dd> </dd>
</dl>
<a name="I:S">
<!-- -->
</a>
<h2 class="title">S</h2>
<dl>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.html#setString-java.lang.String-java.lang.String-java.lang.String-">setString(String, String, String)</a></span> - Static method in class com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dt>
<dd>
<div class="block">Set a single string for a language.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.html#setStrings-java.lang.String-java.util.Map-">setStrings(String, Map<String, String>)</a></span> - Static method in class com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dt>
<dd>
<div class="block">Set strings of a language.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/ice/restring/RestringConfig.Builder.html#stringsLoader-com.ice.restring.Restring.StringsLoader-">stringsLoader(Restring.StringsLoader)</a></span> - Method in class com.ice.restring.<a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring">RestringConfig.Builder</a></dt>
<dd> </dd>
</dl>
<a name="I:W">
<!-- -->
</a>
<h2 class="title">W</h2>
<dl>
<dt><span class="memberNameLink"><a href="com/ice/restring/Restring.html#wrapContext-android.content.Context-">wrapContext(Context)</a></span> - Static method in class com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring">Restring</a></dt>
<dd>
<div class="block">Wraps context of an activity to provide Restring features.</div>
</dd>
</dl>
<a href="#I:B">B</a> <a href="#I:C">C</a> <a href="#I:G">G</a> <a href="#I:I">I</a> <a href="#I:P">P</a> <a href="#I:R">R</a> <a href="#I:S">S</a> <a href="#I:W">W</a> </div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li class="navBarCell1Rev">Index</li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
<li><a href="index-all.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/index.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>restring 1.0.0 API</title>
<script type="text/javascript">
tmpTargetPage = "" + window.location.search;
if (tmpTargetPage != "" && tmpTargetPage != "undefined")
tmpTargetPage = tmpTargetPage.substring(1);
if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
tmpTargetPage = "undefined";
targetPage = tmpTargetPage;
function validURL(url) {
try {
url = decodeURIComponent(url);
}
catch (error) {
return false;
}
var pos = url.indexOf(".html");
if (pos == -1 || pos != url.length - 5)
return false;
var allowNumber = false;
var allowSep = false;
var seenDot = false;
for (var i = 0; i < url.length - 5; i++) {
var ch = url.charAt(i);
if ('a' <= ch && ch <= 'z' ||
'A' <= ch && ch <= 'Z' ||
ch == '$' ||
ch == '_' ||
ch.charCodeAt(0) > 127) {
allowNumber = true;
allowSep = true;
} else if ('0' <= ch && ch <= '9'
|| ch == '-') {
if (!allowNumber)
return false;
} else if (ch == '/' || ch == '.') {
if (!allowSep)
return false;
allowNumber = false;
allowSep = false;
if (ch == '.')
seenDot = true;
if (ch == '/' && seenDot)
return false;
} else {
return false;
}
}
return true;
}
function loadFrames() {
if (targetPage != "" && targetPage != "undefined")
top.classFrame.location = top.targetPage;
}
</script>
</head>
<frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
<frame src="com/ice/restring/package-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
<noframes>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<h2>Frame Alert</h2>
<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="com/ice/restring/package-summary.html">Non-frame version</a>.</p>
</noframes>
</frameset>
</html>
================================================
FILE: docs/overview-tree.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_131) on Fri Mar 16 17:44:00 CET 2018 -->
<title>Class Hierarchy (restring 1.0.0 API)</title>
<meta name="date" content="2018-03-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Class Hierarchy (restring 1.0.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
<li><a href="overview-tree.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 class="title">Hierarchy For All Packages</h1>
<span class="packageHierarchyLabel">Package Hierarchies:</span>
<ul class="horizontal">
<li><a href="com/ice/restring/package-tree.html">com.ice.restring</a></li>
</ul>
</div>
<div class="contentContainer">
<h2 title="Class Hierarchy">Class Hierarchy</h2>
<ul>
<li type="circle">java.lang.Object
<ul>
<li type="circle">com.ice.restring.<a href="com/ice/restring/Restring.html" title="class in com.ice.restring"><span class="typeNameLink">Restring</span></a></li>
<li type="circle">com.ice.restring.<a href="com/ice/restring/RestringConfig.html" title="class in com.ice.restring"><span class="typeNameLink">RestringConfig</span></a></li>
<li type="circle">com.ice.restring.<a href="com/ice/restring/RestringConfig.Builder.html" title="class in com.ice.restring"><span class="typeNameLink">RestringConfig.Builder</span></a></li>
</ul>
</li>
</ul>
<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
<ul>
<li type="circle">com.ice.restring.<a href="com/ice/restring/Restring.StringsLoader.html" title="interface in com.ice.restring"><span class="typeNameLink">Restring.StringsLoader</span></a></li>
</ul>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="com/ice/restring/package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
<li><a href="overview-tree.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
================================================
FILE: docs/package-list
================================================
com.ice.restring
================================================
FILE: docs/script.js
================================================
function show(type)
{
count = 0;
for (var key in methods) {
var row = document.getElementById(key);
if ((methods[key] & type) != 0) {
row.style.display = '';
row.className = (count++ % 2) ? rowColor : altColor;
}
else
row.style.display = 'none';
}
updateTabs(type);
}
function updateTabs(type)
{
for (var value in tabs) {
var sNode = document.getElementById(tabs[value][0]);
var spanNode = sNode.firstChild;
if (value == type) {
sNode.className = activeTableTab;
spanNode.innerHTML = tabs[value][1];
}
else {
sNode.className = tableTab;
spanNode.innerHTML = "<a href=\"javascript:show("+ value + ");\">" + tabs[value][1] + "</a>";
}
}
}
================================================
FILE: docs/stylesheet.css
================================================
/* Javadoc style sheet */
/*
Overall document style
*/
@import url('resources/fonts/dejavu.css');
body {
background-color:#ffffff;
color:#353833;
font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
font-size:14px;
margin:0;
}
a:link, a:visited {
text-decoration:none;
color:#4A6782;
}
a:hover, a:focus {
text-decoration:none;
color:#bb7a2a;
}
a:active {
text-decoration:none;
color:#4A6782;
}
a[name] {
color:#353833;
}
a[name]:hover {
text-decoration:none;
color:#353833;
}
pre {
font-family:'DejaVu Sans Mono', monospace;
font-size:14px;
}
h1 {
font-size:20px;
}
h2 {
font-size:18px;
}
h3 {
font-size:16px;
font-style:italic;
}
h4 {
font-size:13px;
}
h5 {
font-size:12px;
}
h6 {
font-size:11px;
}
ul {
list-style-type:disc;
}
code, tt {
font-family:'DejaVu Sans Mono', monospace;
font-size:14px;
padding-top:4px;
margin-top:8px;
line-height:1.4em;
}
dt code {
font-family:'DejaVu Sans Mono', monospace;
font-size:14px;
padding-top:4px;
}
table tr td dt code {
font-family:'DejaVu Sans Mono', monospace;
font-size:14px;
vertical-align:top;
padding-top:4px;
}
sup {
font-size:8px;
}
/*
Document title and Copyright styles
*/
.clear {
clear:both;
height:0px;
overflow:hidden;
}
.aboutLanguage {
float:right;
padding:0px 21px;
font-size:11px;
z-index:200;
margin-top:-9px;
}
.legalCopy {
margin-left:.5em;
}
.bar a, .bar a:link, .bar a:visited, .bar a:active {
color:#FFFFFF;
text-decoration:none;
}
.bar a:hover, .bar a:focus {
color:#bb7a2a;
}
.tab {
background-color:#0066FF;
color:#ffffff;
padding:8px;
width:5em;
font-weight:bold;
}
/*
Navigation bar styles
*/
.bar {
background-color:#4D7A97;
color:#FFFFFF;
padding:.8em .5em .4em .8em;
height:auto;/*height:1.8em;*/
font-size:11px;
margin:0;
}
.topNav {
background-color:#4D7A97;
color:#FFFFFF;
float:left;
padding:0;
width:100%;
clear:right;
height:2.8em;
padding-top:10px;
overflow:hidden;
font-size:12px;
}
.bottomNav {
margin-top:10px;
background-color:#4D7A97;
color:#FFFFFF;
float:left;
padding:0;
width:100%;
clear:right;
height:2.8em;
padding-top:10px;
overflow:hidden;
font-size:12px;
}
.subNav {
background-color:#dee3e9;
float:left;
width:100%;
overflow:hidden;
font-size:12px;
}
.subNav div {
clear:left;
float:left;
padding:0 0 5px 6px;
text-transform:uppercase;
}
ul.navList, ul.subNavList {
float:left;
margin:0 25px 0 0;
padding:0;
}
ul.navList li{
list-style:none;
float:left;
padding: 5px 6px;
text-transform:uppercase;
}
ul.subNavList li{
list-style:none;
float:left;
}
.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
color:#FFFFFF;
text-decoration:none;
text-transform:uppercase;
}
.topNav a:hover, .bottomNav a:hover {
text-decoration:none;
color:#bb7a2a;
text-transform:uppercase;
}
.navBarCell1Rev {
background-color:#F8981D;
color:#253441;
margin: auto 5px;
}
.skipNav {
position:absolute;
top:auto;
left:-9999px;
overflow:hidden;
}
/*
Page header and footer styles
*/
.header, .footer {
clear:both;
margin:0 20px;
padding:5px 0 0 0;
}
.indexHeader {
margin:10px;
position:relative;
}
.indexHeader span{
margin-right:15px;
}
.indexHeader h1 {
font-size:13px;
}
.title {
color:#2c4557;
margin:10px 0;
}
.subTitle {
margin:5px 0 0 0;
}
.header ul {
margin:0 0 15px 0;
padding:0;
}
.footer ul {
margin:20px 0 5px 0;
}
.header ul li, .footer ul li {
list-style:none;
font-size:13px;
}
/*
Heading styles
*/
div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
background-color:#dee3e9;
border:1px solid #d0d9e0;
margin:0 0 6px -8px;
padding:7px 5px;
}
ul.blockList ul.blockList ul.blockList li.blockList h3 {
background-color:#dee3e9;
border:1px solid #d0d9e0;
margin:0 0 6px -8px;
padding:7px 5px;
}
ul.blockList ul.blockList li.blockList h3 {
padding:0;
margin:15px 0;
}
ul.blockList li.blockList h2 {
padding:0px 0 20px 0;
}
/*
Page layout container styles
*/
.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
clear:both;
padding:10px 20px;
position:relative;
}
.indexContainer {
margin:10px;
position:relative;
font-size:12px;
}
.indexContainer h2 {
font-size:13px;
padding:0 0 3px 0;
}
.indexContainer ul {
margin:0;
padding:0;
}
.indexContainer ul li {
list-style:none;
padding-top:2px;
}
.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
font-size:12px;
font-weight:bold;
margin:10px 0 0 0;
color:#4E4E4E;
}
.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
margin:5px 0 10px 0px;
font-size:14px;
font-family:'DejaVu Sans Mono',monospace;
}
.serializedFormContainer dl.nameValue dt {
margin-left:1px;
font-size:1.1em;
display:inline;
font-weight:bold;
}
.serializedFormContainer dl.nameValue dd {
margin:0 0 0 1px;
font-size:1.1em;
display:inline;
}
/*
List styles
*/
ul.horizontal li {
display:inline;
font-size:0.9em;
}
ul.inheritance {
margin:0;
padding:0;
}
ul.inheritance li {
display:inline;
list-style:none;
}
ul.inheritance li ul.inheritance {
margin-left:15px;
padding-left:15px;
padding-top:1px;
}
ul.blockList, ul.blockListLast {
margin:10px 0 10px 0;
padding:0;
}
ul.blockList li.blockList, ul.blockListLast li.blockList {
list-style:none;
margin-bottom:15px;
line-height:1.4;
}
ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
padding:0px 20px 5px 10px;
border:1px solid #ededed;
background-color:#f8f8f8;
}
ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
padding:0 0 5px 8px;
background-color:#ffffff;
border:none;
}
ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
margin-left:0;
padding-left:0;
padding-bottom:15px;
border:none;
}
ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
list-style:none;
border-bottom:none;
padding-bottom:0;
}
table tr td dl, table tr td dl dt, table tr td dl dd {
margin-top:0;
margin-bottom:1px;
}
/*
Table styles
*/
.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
width:100%;
border-left:1px solid #EEE;
border-right:1px solid #EEE;
border-bottom:1px solid #EEE;
}
.overviewSummary, .memberSummary {
padding:0px;
}
.overviewSummary caption, .memberSummary caption, .typeSummary caption,
.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
position:relative;
text-align:left;
background-repeat:no-repeat;
color:#253441;
font-weight:bold;
clear:none;
overflow:hidden;
padding:0px;
padding-top:10px;
padding-left:1px;
margin:0px;
white-space:pre;
}
.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
color:#FFFFFF;
}
.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
white-space:nowrap;
padding-top:5px;
padding-left:12px;
padding-right:12px;
padding-bottom:7px;
display:inline-block;
float:left;
background-color:#F8981D;
border: none;
height:16px;
}
.memberSummary caption span.activeTableTab span {
white-space:nowrap;
padding-top:5px;
padding-left:12px;
padding-right:12px;
margin-right:3px;
display:inline-block;
float:left;
background-color:#F8981D;
height:16px;
}
.memberSummary caption span.tableTab span {
white-space:nowrap;
padding-top:5px;
padding-left:12px;
padding-right:12px;
margin-right:3px;
display:inline-block;
float:left;
background-color:#4D7A97;
height:16px;
}
.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
padding-top:0px;
padding-left:0px;
padding-right:0px;
background-image:none;
float:none;
display:inline;
}
.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
display:none;
width:5px;
position:relative;
float:left;
background-color:#F8981D;
}
.memberSummary .activeTableTab .tabEnd {
display:none;
width:5px;
margin-right:3px;
position:relative;
float:left;
background-color:#F8981D;
}
.memberSummary .tableTab .tabEnd {
display:none;
width:5px;
margin-right:3px;
position:relative;
background-color:#4D7A97;
float:left;
}
.overviewSummary td, .memberSummary td, .typeSummary td,
.useSummary td, .constantsSummary td, .deprecatedSummary td {
text-align:left;
padding:0px 0px 12px 10px;
}
th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
vertical-align:top;
padding-right:0px;
padding-top:8px;
padding-bottom:3px;
}
th.colFirst, th.colLast, th.colOne, .constantsSummary th {
background:#dee3e9;
text-align:left;
padding:8px 3px 3px 7px;
}
td.colFirst, th.colFirst {
white-space:nowrap;
font-size:13px;
}
td.colLast, th.colLast {
font-size:13px;
}
td.colOne, th.colOne {
font-size:13px;
}
.overviewSummary td.colFirst, .overviewSummary th.colFirst,
.useSummary td.colFirst, .useSummary th.colFirst,
.overviewSummary td.colOne, .overviewSummary th.colOne,
.memberSummary td.colFirst, .memberSummary th.colFirst,
.memberSummary td.colOne, .memberSummary th.colOne,
.typeSummary td.colFirst{
width:25%;
vertical-align:top;
}
td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
font-weight:bold;
}
.tableSubHeadingColor {
background-color:#EEEEFF;
}
.altColor {
background-color:#FFFFFF;
}
.rowColor {
background-color:#EEEEEF;
}
/*
Content styles
*/
.description pre {
margin-top:0;
}
.deprecatedContent {
margin:0;
padding:10px 0;
}
.docSummary {
padding:0;
}
ul.blockList ul.blockList ul.blockList li.blockList h3 {
font-style:normal;
}
div.block {
font-size:14px;
font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
}
td.colLast div {
padding-top:0px;
}
td.colLast a {
padding-bottom:3px;
}
/*
Formatting effect styles
*/
.sourceLineNo {
color:green;
padding:0 30px 0 0;
}
h1.hidden {
visibility:hidden;
overflow:hidden;
font-size:10px;
}
.block {
display:block;
margin:3px 10px 2px 0px;
color:#474747;
}
.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
font-weight:bold;
}
.deprecationComment, .emphasizedPhrase, .interfaceName {
font-style:italic;
}
div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
div.block div.block span.interfaceName {
font-style:normal;
}
div.contentContainer ul.blockList li.blockList h2{
padding-bottom:0px;
}
================================================
FILE: example/.gitignore
================================================
/build
================================================
FILE: example/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.ice.restring.example"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation project(":restring")
implementation deps.supportAppCompat
implementation deps.constraintLayout
}
================================================
FILE: example/proguard-rules.pro
================================================
# 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
================================================
FILE: example/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ice.restring.example">
<application
android:name=".SampleApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: example/src/main/java/com/ice/restring/example/BaseActivity.java
================================================
package com.ice.restring.example;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import com.ice.restring.Restring;
/**
* We should wrap the base context of our activities, which is better to put it
* on BaseActivity, so that we don't have to repeat it for all activities one-by-one.
*/
public class BaseActivity extends AppCompatActivity {
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(Restring.wrapContext(newBase));
}
}
================================================
FILE: example/src/main/java/com/ice/restring/example/MainActivity.java
================================================
package com.ice.restring.example;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((TextView) findViewById(R.id.text_view2)).setText(R.string.subtitle);
}
}
================================================
FILE: example/src/main/java/com/ice/restring/example/SampleApplication.java
================================================
package com.ice.restring.example;
import android.app.Application;
import com.ice.restring.Restring;
import com.ice.restring.RestringConfig;
public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Restring.init(this,
new RestringConfig.Builder()
.persist(true)
.stringsLoader(new SampleStringsLoader())
.build()
);
}
}
================================================
FILE: example/src/main/java/com/ice/restring/example/SampleStringsLoader.java
================================================
package com.ice.restring.example;
import com.ice.restring.Restring;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* This is just a really simple sample of strings loader.
* in real applications, you might call an API to get your strings.
* <p>
* All overridden methods will be called on background thread.
*/
public class SampleStringsLoader implements Restring.StringsLoader {
@Override
public List<String> getLanguages() {
return Arrays.asList("en", "de", "fa");
}
@Override
public Map<String, String> getStrings(String language) {
Map<String, String> map = new HashMap<>();
switch (language) {
case "en": {
map.put("title", "This is title (from restring).");
map.put("subtitle", "This is subtitle (from restring).");
break;
}
case "de": {
map.put("title", "Das ist Titel (from restring).");
map.put("subtitle", "Das ist Untertitel (from restring).");
break;
}
case "fa": {
map.put("title", "In sarkhat ast (from restring).");
map.put("subtitle", "In matn ast (from restring).");
break;
}
}
return map;
}
}
================================================
FILE: example/src/main/res/drawable/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#26A69A"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
</vector>
================================================
FILE: example/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>
================================================
FILE: example/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title"
android:textColor="#FF333333"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text=""
android:textColor="#FF777777"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view1" />
</android.support.constraint.ConstraintLayout>
================================================
FILE: example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: example/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
================================================
FILE: example/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">Restring</string>
<string name="title">This is title.</string>
<string name="subtitle">This is subtitle.</string>
</resources>
================================================
FILE: example/src/main/res/values/styles.xml
================================================
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Thu Mar 15 15:49:17 CET 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.5-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android 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
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# 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"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
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
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
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.
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" -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\""
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)"
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
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
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"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@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=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: restring/.gitignore
================================================
/build
================================================
FILE: restring/bintray.gradle
================================================
apply plugin: 'com.jfrog.bintray'
version = libraryVersion
/*
* Comment the following part if you only want to distribute .aar files.
* (For example, your source code is obfuscated by Proguard and is not shown to outsite developers)
* Without source code .jar files, you only can publish on bintray respository but not jcenter.
*/
/*--------------------------------*/
if (project.hasProperty("android")) {
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
afterEvaluate {
javadoc.classpath += files(android.libraryVariants.collect { variant ->
variant.javaCompiler.classpath.files
})
}
} else { // Java libraries
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
/*--------------------------------*/
// Bintray
String localProperty(propertyName) {
Properties properties = new Properties()
File file = project.rootProject.file('local.properties')
if (file.exists()) {
properties.load(file.newDataInputStream())
return properties.getProperty(propertyName)
}
return ""
}
bintray {
user = localProperty("bintrayUser")
key = localProperty("bintrayApiKey")
configurations = ['archives']
pkg {
repo = bintrayRepo
name = bintrayName
desc = libraryDescription
userOrg = organization
// If the repository is hosted by an organization instead of personal account.
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = allLicenses
publish = true
override = true
publicDownloadNumbers = true
version {
desc = libraryDescription
}
}
}
================================================
FILE: restring/build.gradle
================================================
apply plugin: 'com.android.library'
apply from: 'jacoco.gradle'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
minifyEnabled false
testCoverageEnabled true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
dependencies {
// Support libraries
implementation deps.supportAppCompat
implementation deps.supportDesign
// Test libraries
testImplementation deps.junit
testImplementation deps.hamcrest
testImplementation deps.mockito
testImplementation deps.robolectric
}
apply from: 'publish.gradle'
================================================
FILE: restring/install.gradle
================================================
apply plugin: 'com.github.dcendents.android-maven'
group = publishedGroupId // Maven Group ID for the artifact
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom.project {
packaging 'aar'
groupId publishedGroupId
artifactId artifact
// Add your description here
name libraryName
description libraryDescription
url siteUrl
// Set your license
licenses {
license {
name licenseName
url licenseUrl
}
}
developers {
developer {
id developerId
name developerName
email developerEmail
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
================================================
FILE: restring/jacoco.gradle
================================================
apply plugin: 'jacoco'
jacoco {
toolVersion = '0.8.0'
}
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
def debugTree = fileTree(dir: "$project.buildDir/intermediates/artifact_transform/compileDebugJavaWithJavac/classes", excludes: fileFilter)
def mainSrc = "$project.projectDir/src/main/java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.buildDir, includes: [
'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
])
}
================================================
FILE: restring/proguard-rules.pro
================================================
# 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
================================================
FILE: restring/publish.gradle
================================================
ext {
bintrayRepo = 'maven'
bintrayName = 'restring'
publishedGroupId = 'com.ice.restring'
artifact = 'restring'
libraryVersion = '1.0.0'
libraryName = 'Restring'
libraryDescription = 'Replace Strings dynamically, or provide new translations, for Android'
siteUrl = 'https://github.com/hamidness/restring'
gitUrl = 'https://github.com/hamidness/restring.git'
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
developerId = 'hamidfri'
developerName = 'Hamid Gharehdaghi'
developerEmail = 'hamidice@gmail.com'
organization = ''
}
apply from: 'install.gradle'
apply from: 'bintray.gradle'
================================================
FILE: restring/src/main/AndroidManifest.xml
================================================
<manifest package="com.ice.restring" />
================================================
FILE: restring/src/main/java/com/ice/restring/BottomNavigationViewTransformer.java
================================================
package com.ice.restring;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.support.design.widget.BottomNavigationView;
import android.util.AttributeSet;
import android.util.Pair;
import android.util.Xml;
import android.view.View;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* A transformer which transforms BottomNavigationView: it transforms the texts coming from the menu.
*/
class BottomNavigationViewTransformer implements ViewTransformerManager.Transformer {
private static final String ATTRIBUTE_MENU = "menu";
private static final String ATTRIBUTE_APP_MENU = "app:menu";
private static final String ATTRIBUTE_ID = "id";
private static final String ATTRIBUTE_ANDROID_ID = "android:id";
private static final String ATTRIBUTE_TITLE = "title";
private static final String ATTRIBUTE_ANDROID_TITLE = "android:title";
private static final String ATTRIBUTE_TITLE_CONDENSED = "titleCondensed";
private static final String ATTRIBUTE_ANDROID_TITLE_CONDENSED = "android:titleCondensed";
private static final String XML_MENU = "menu";
private static final String XML_ITEM = "item";
@Override
public Class<? extends View> getViewType() {
return BottomNavigationView.class;
}
@Override
public View transform(View view, AttributeSet attrs) {
if (view == null || !getViewType().isInstance(view)) {
return view;
}
Resources resources = view.getContext().getResources();
BottomNavigationView bottomNavigationView = (BottomNavigationView) view;
for (int index = 0; index < attrs.getAttributeCount(); index++) {
String attributeName = attrs.getAttributeName(index);
switch (attributeName) {
case ATTRIBUTE_APP_MENU:
case ATTRIBUTE_MENU: {
String value = attrs.getAttributeValue(index);
if (value == null || !value.startsWith("@")) break;
int resId = attrs.getAttributeResourceValue(index, 0);
Map<Integer, MenuItemStrings> itemStrings = getMenuItemsStrings(resources, resId);
for (Map.Entry<Integer, MenuItemStrings> entry : itemStrings.entrySet()) {
if (entry.getValue().title != 0) {
bottomNavigationView.getMenu().findItem(entry.getKey()).setTitle(
resources.getString(entry.getValue().title)
);
}
if (entry.getValue().titleCondensed != 0) {
bottomNavigationView.getMenu().findItem(entry.getKey()).setTitleCondensed(
resources.getString(entry.getValue().titleCondensed)
);
}
}
break;
}
}
}
return view;
}
private Map<Integer, MenuItemStrings> getMenuItemsStrings(Resources resources, int resId) {
XmlResourceParser parser = resources.getLayout(resId);
AttributeSet attrs = Xml.asAttributeSet(parser);
try {
return parseMenu(parser, attrs);
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
return new HashMap<>();
}
}
private Map<Integer, MenuItemStrings> parseMenu(XmlPullParser parser, AttributeSet attrs)
throws XmlPullParserException, IOException {
Map<Integer, MenuItemStrings> menuItems = new HashMap<>();
int eventType = parser.getEventType();
String tagName;
// This loop will skip to the menu start tag
do {
if (eventType == XmlPullParser.START_TAG) {
tagName = parser.getName();
if (tagName.equals(XML_MENU)) {
eventType = parser.next();
break;
}
throw new RuntimeException("Expecting menu, got " + tagName);
}
eventType = parser.next();
} while (eventType != XmlPullParser.END_DOCUMENT);
boolean reachedEndOfMenu = false;
int menuLevel = 0;
while (!reachedEndOfMenu) {
switch (eventType) {
case XmlPullParser.START_TAG:
tagName = parser.getName();
if (tagName.equals(XML_ITEM)) {
Pair<Integer, MenuItemStrings> item = parseMenuItem(attrs);
if (item != null) {
menuItems.put(item.first, item.second);
}
} else if (tagName.equals(XML_MENU)) {
menuLevel++;
}
break;
case XmlPullParser.END_TAG:
tagName = parser.getName();
if (tagName.equals(XML_MENU)) {
menuLevel--;
if (menuLevel <= 0) {
reachedEndOfMenu = true;
}
}
break;
case XmlPullParser.END_DOCUMENT:
reachedEndOfMenu = true;
}
eventType = parser.next();
}
return menuItems;
}
private Pair<Integer, MenuItemStrings> parseMenuItem(AttributeSet attrs) {
int menuId = 0;
MenuItemStrings menuItemStrings = null;
int attributeCount = attrs.getAttributeCount();
for (int index = 0; index < attributeCount; index++) {
switch (attrs.getAttributeName(index)) {
case ATTRIBUTE_ANDROID_ID:
case ATTRIBUTE_ID: {
menuId = attrs.getAttributeResourceValue(index, 0);
break;
}
case ATTRIBUTE_ANDROID_TITLE:
case ATTRIBUTE_TITLE: {
String value = attrs.getAttributeValue(index);
if (value == null || !value.startsWith("@")) break;
if (menuItemStrings == null) {
menuItemStrings = new MenuItemStrings();
}
menuItemStrings.title = attrs.getAttributeResourceValue(index, 0);
break;
}
case ATTRIBUTE_ANDROID_TITLE_CONDENSED:
case ATTRIBUTE_TITLE_CONDENSED: {
String value = attrs.getAttributeValue(index);
if (value == null || !value.startsWith("@")) break;
if (menuItemStrings == null) {
menuItemStrings = new MenuItemStrings();
}
menuItemStrings.titleCondensed = attrs.getAttributeResourceValue(index, 0);
break;
}
}
}
return (menuId != 0 && menuItemStrings != null)
? new Pair<>(menuId, menuItemStrings)
: null;
}
private static class MenuItemStrings {
public int title;
public int titleCondensed;
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/CustomResourcesContextWrapper.java
================================================
package com.ice.restring;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Resources;
/**
* A context wrapper which provide another Resources instead of the original one.
*/
class CustomResourcesContextWrapper extends ContextWrapper {
private Resources resources;
public CustomResourcesContextWrapper(Context base, Resources resources) {
super(base);
this.resources = resources;
}
@Override
public Resources getResources() {
return resources;
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/MemoryStringRepository.java
================================================
package com.ice.restring;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* A StringRepository which keeps the strings ONLY in memory.
* <p>
* it's not ThreadSafe.
*/
class MemoryStringRepository implements StringRepository {
private Map<String, Map<String, String>> strings = new LinkedHashMap<>();
@Override
public void setStrings(String language, Map<String, String> newStrings) {
strings.put(language, newStrings);
}
@Override
public void setString(String language, String key, String value) {
if (!strings.containsKey(language)) {
strings.put(language, new LinkedHashMap<>());
}
strings.get(language).put(key, value);
}
@Override
public String getString(String language, String key) {
if (!strings.containsKey(language) || !strings.get(language).containsKey(key)) {
return null;
}
return strings.get(language).get(key);
}
@Override
public Map<String, String> getStrings(String language) {
if (!strings.containsKey(language)) {
return new LinkedHashMap<>();
}
return new LinkedHashMap<>(strings.get(language));
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/ReflectionUtils.java
================================================
package com.ice.restring;
import android.util.Log;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Created by chris on 17/12/14.
* Copied from Calligraphy:
* https://github.com/chrisjenx/Calligraphy/blob/master/calligraphy/src/main/java/uk/co/chrisjenx/calligraphy/ReflectionUtils.java
*/
class ReflectionUtils {
private static final String TAG = ReflectionUtils.class.getSimpleName();
static Field getField(Class clazz, String fieldName) {
try {
final Field f = clazz.getDeclaredField(fieldName);
f.setAccessible(true);
return f;
} catch (NoSuchFieldException ignored) {
}
return null;
}
static Object getValue(Field field, Object obj) {
try {
return field.get(obj);
} catch (IllegalAccessException ignored) {
}
return null;
}
static void setValue(Field field, Object obj, Object value) {
try {
field.set(obj, value);
} catch (IllegalAccessException ignored) {
}
}
static Method getMethod(Class clazz, String methodName) {
final Method[] methods = clazz.getMethods();
for (Method method : methods) {
if (method.getName().equals(methodName)) {
method.setAccessible(true);
return method;
}
}
return null;
}
static void invokeMethod(Object object, Method method, Object... args) {
try {
if (method == null) return;
method.invoke(object, args);
} catch (IllegalAccessException e) {
Log.d(TAG, "Can't invoke method using reflection", e);
} catch (InvocationTargetException e) {
Log.d(TAG, "Can't invoke method using reflection", e);
}
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/Restring.java
================================================
package com.ice.restring;
import android.content.Context;
import android.content.ContextWrapper;
import java.util.List;
import java.util.Map;
/**
* Entry point for Restring. it will be used for initializing Restring components, setting new strings,
* wrapping activity context.
*/
public abstract class Restring {
private static boolean isInitialized = false;
private static StringRepository stringRepository;
private static ViewTransformerManager viewTransformerManager;
/**
* Initialize Restring with default configuration.
*
* @param context of the application.
*/
public static void init(Context context) {
init(context, RestringConfig.getDefault());
}
/**
* Initialize Restring with the specified configuration.
*
* @param context of the application.
* @param config of the Restring.
*/
public static void init(Context context, RestringConfig config) {
if (isInitialized) {
return;
}
isInitialized = true;
initStringRepository(context, config);
initViewTransformer();
}
/**
* Wraps context of an activity to provide Restring features.
*
* @param base context of an activity.
* @return the Restring wrapped context.
*/
public static ContextWrapper wrapContext(Context base) {
return RestringContextWrapper.wrap(base, stringRepository, viewTransformerManager);
}
/**
* Set strings of a language.
*
* @param language the strings are for.
* @param newStrings the strings of the language.
*/
public static void setStrings(String language, Map<String, String> newStrings) {
stringRepository.setStrings(language, newStrings);
}
/**
* Set a single string for a language.
*
* @param language the string is for.
* @param key the string key.
* @param value the string value.
*/
public static void setString(String language, String key, String value) {
stringRepository.setString(language, key, value);
}
static StringRepository getStringRepository() {
return stringRepository;
}
private static void initStringRepository(Context context, RestringConfig config) {
if (config.isPersist()) {
stringRepository = new SharedPrefStringRepository(context);
} else {
stringRepository = new MemoryStringRepository();
}
if (config.getStringsLoader() != null) {
new StringsLoaderTask(config.getStringsLoader(), stringRepository).run();
}
}
private static void initViewTransformer() {
viewTransformerManager = new ViewTransformerManager();
viewTransformerManager.registerTransformer(new TextViewTransformer());
viewTransformerManager.registerTransformer(new ToolbarTransformer());
viewTransformerManager.registerTransformer(new SupportToolbarTransformer());
viewTransformerManager.registerTransformer(new BottomNavigationViewTransformer());
}
/**
* Loader of strings skeleton. Clients can implement this interface if they want to load strings on initialization.
* First the list of languages will be asked, then strings of each language.
*/
public interface StringsLoader {
/**
* Get supported languages.
*
* @return the list of languages.
*/
List<String> getLanguages();
/**
* Get strings of a language as keys & values.
*
* @param language of the strings.
* @return the strings as (key, value).
*/
Map<String, String> getStrings(String language);
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/RestringConfig.java
================================================
package com.ice.restring;
/**
* Contains configuration properties for initializing Restring.
*/
public class RestringConfig {
private boolean persist;
private Restring.StringsLoader stringsLoader;
public boolean isPersist() {
return persist;
}
public Restring.StringsLoader getStringsLoader() {
return stringsLoader;
}
private RestringConfig() {
}
public static class Builder {
private boolean persist;
private Restring.StringsLoader stringsLoader;
public Builder persist(boolean persist) {
this.persist = persist;
return this;
}
public Builder stringsLoader(Restring.StringsLoader loader) {
this.stringsLoader = loader;
return this;
}
public RestringConfig build() {
RestringConfig config = new RestringConfig();
config.persist = persist;
config.stringsLoader = stringsLoader;
return config;
}
}
static RestringConfig getDefault() {
return new Builder()
.persist(true)
.build();
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/RestringContextWrapper.java
================================================
package com.ice.restring;
import android.content.Context;
import android.content.ContextWrapper;
import android.view.LayoutInflater;
/**
* Main Restring context wrapper which wraps the context for providing another layout inflater & resources.
*/
class RestringContextWrapper extends ContextWrapper {
private RestringLayoutInflater layoutInflater;
private ViewTransformerManager viewTransformerManager;
public static RestringContextWrapper wrap(Context context,
StringRepository stringRepository,
ViewTransformerManager viewTransformerManager) {
return new RestringContextWrapper(context, stringRepository, viewTransformerManager);
}
private RestringContextWrapper(Context base,
StringRepository stringRepository,
ViewTransformerManager viewTransformerManager) {
super(
new CustomResourcesContextWrapper(
base,
new RestringResources(base.getResources(), stringRepository))
);
this.viewTransformerManager = viewTransformerManager;
}
@Override
public Object getSystemService(String name) {
if (LAYOUT_INFLATER_SERVICE.equals(name)) {
if (layoutInflater == null) {
layoutInflater = new RestringLayoutInflater(LayoutInflater.from(getBaseContext()), this, viewTransformerManager, true);
}
return layoutInflater;
}
return super.getSystemService(name);
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/RestringLayoutInflater.java
================================================
package com.ice.restring;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.xmlpull.v1.XmlPullParser;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Restring custom layout inflater. it puts hook on view creation, and tries to apply some transformations
* to the newly created views.
* <p>
* Transformations can consist of transforming the texts applied on XML layout resources, so that it checks if
* the string attribute set as a string resource it transforms the text and apply it to the view again.
*/
class RestringLayoutInflater extends LayoutInflater {
private boolean privateFactorySet = false;
private Field mConstructorArgs = null;
private ViewTransformerManager viewTransformerManager;
private static final String[] sClassPrefixList = {
"android.widget.",
"android.webkit.",
"android.app."
};
protected RestringLayoutInflater(Context context) {
super(context);
initFactories();
}
RestringLayoutInflater(LayoutInflater original,
Context newContext,
ViewTransformerManager viewTransformerManager,
final boolean cloned) {
super(original, newContext);
this.viewTransformerManager = viewTransformerManager;
if (!cloned) {
initFactories();
}
}
@Override
public LayoutInflater cloneInContext(Context newContext) {
return new RestringLayoutInflater(this, newContext, viewTransformerManager, true);
}
private void initFactories() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (getFactory2() != null) {
setFactory2(getFactory2());
}
}
if (getFactory() != null) {
setFactory(getFactory());
}
}
@Override
public void setFactory(Factory factory) {
if (!(factory instanceof WrapperFactory)) {
super.setFactory(new WrapperFactory(factory));
} else {
super.setFactory(factory);
}
}
@Override
public void setFactory2(Factory2 factory2) {
if (!(factory2 instanceof WrapperFactory2)) {
super.setFactory2(new WrapperFactory2(factory2));
} else {
super.setFactory2(factory2);
}
}
private void setPrivateFactoryInternal() {
if (privateFactorySet) return;
if (!(getContext() instanceof Factory2)) {
privateFactorySet = true;
return;
}
final Method setPrivateFactoryMethod = ReflectionUtils
.getMethod(LayoutInflater.class, "setPrivateFactory");
if (setPrivateFactoryMethod != null) {
PrivateWrapperFactory2 newFactory = new PrivateWrapperFactory2((Factory2) getContext());
ReflectionUtils.invokeMethod(
this,
setPrivateFactoryMethod,
newFactory);
}
privateFactorySet = true;
}
@Override
public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {
setPrivateFactoryInternal();
return super.inflate(parser, root, attachToRoot);
}
@Override
protected View onCreateView(String name, AttributeSet attrs) throws ClassNotFoundException {
for (String prefix : sClassPrefixList) {
try {
View view = createView(name, prefix, attrs);
if (view != null) {
return applyChange(view, attrs);
}
} catch (ClassNotFoundException e) {
// In this case we want to let the base class take a crack
// at it.
}
}
return super.onCreateView(name, attrs);
}
private View applyChange(View view, AttributeSet attrs) {
return viewTransformerManager.transform(view, attrs);
}
private class WrapperFactory implements Factory {
private Factory factory;
WrapperFactory(Factory factory) {
this.factory = factory;
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = factory.onCreateView(name, context, attrs);
return applyChange(view, attrs);
}
}
private class WrapperFactory2 implements Factory2 {
private Factory2 factory2;
WrapperFactory2(Factory2 factory2) {
this.factory2 = factory2;
}
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
View view = factory2.onCreateView(parent, name, context, attrs);
return applyChange(view, attrs);
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = factory2.onCreateView(name, context, attrs);
return applyChange(view, attrs);
}
}
private View createCustomViewInternal(View parent, View view, String name, Context viewContext, AttributeSet attrs) {
// I by no means advise anyone to do this normally, but Google have locked down access to
// the createView() method, so we never get a callback with attributes at the end of the
// createViewFromTag chain (which would solve all this unnecessary rubbish).
// We at the very least try to optimise this as much as possible.
// We only call for customViews (As they are the ones that never go through onCreateView(...)).
// We also maintain the Field reference and make it accessible which will make a pretty
// significant difference to performance on Android 4.0+.
// If CustomViewCreation is off skip this.
if (view == null && name.indexOf('.') > -1) {
if (mConstructorArgs == null)
mConstructorArgs = ReflectionUtils.getField(LayoutInflater.class, "mConstructorArgs");
final Object[] mConstructorArgsArr = (Object[]) ReflectionUtils.getValue(mConstructorArgs, this);
final Object lastContext = mConstructorArgsArr[0];
// The LayoutInflater actually finds out the correct context to use. We just need to set
// it on the mConstructor for the internal method.
// Set the constructor ars up for the createView, not sure why we can't pass these in.
mConstructorArgsArr[0] = viewContext;
ReflectionUtils.setValue(mConstructorArgs, this, mConstructorArgsArr);
try {
view = createView(name, null, attrs);
} catch (ClassNotFoundException ignored) {
} finally {
mConstructorArgsArr[0] = lastContext;
ReflectionUtils.setValue(mConstructorArgs, this, mConstructorArgsArr);
}
}
return view;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private class PrivateWrapperFactory2 implements Factory2 {
private Factory2 factory2;
public PrivateWrapperFactory2(Factory2 factory2) {
this.factory2 = factory2;
}
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
View view = factory2.onCreateView(parent, name, context, attrs);
view = createCustomViewInternal(parent, view, name, context, attrs);
return applyChange(view, attrs);
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = factory2.onCreateView(name, context, attrs);
view = createCustomViewInternal(null, view, name, context, attrs);
return applyChange(view, attrs);
}
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/RestringResources.java
================================================
package com.ice.restring;
import android.content.res.Resources;
import android.os.Build;
import android.support.annotation.NonNull;
import android.text.Html;
/**
* This is the wrapped resources which will be provided by Restring.
* For getting strings and texts, it checks the strings repository first and if there's a new string
* that will be returned, otherwise it will fallback to the original resource strings.
*/
class RestringResources extends Resources {
private final StringRepository stringRepository;
RestringResources(@NonNull final Resources res,
@NonNull final StringRepository stringRepository) {
super(res.getAssets(), res.getDisplayMetrics(), res.getConfiguration());
this.stringRepository = stringRepository;
}
@NonNull
@Override
public String getString(int id) throws NotFoundException {
String value = getStringFromRepository(id);
if (value != null) {
return value;
}
return super.getString(id);
}
@NonNull
@Override
public String getString(int id, Object... formatArgs) throws NotFoundException {
String value = getStringFromRepository(id);
if (value != null) {
return String.format(value, formatArgs);
}
return super.getString(id, formatArgs);
}
@NonNull
@Override
public CharSequence getText(int id) throws NotFoundException {
String value = getStringFromRepository(id);
if (value != null) {
return fromHtml(value);
}
return super.getText(id);
}
@Override
public CharSequence getText(int id, CharSequence def) {
String value = getStringFromRepository(id);
if (value != null) {
return fromHtml(value);
}
return super.getText(id, def);
}
private String getStringFromRepository(int id) {
try {
String stringKey = getResourceEntryName(id);
return stringRepository.getString(RestringUtil.getCurrentLanguage(), stringKey);
} catch (NotFoundException ex) {
return null;
}
}
private CharSequence fromHtml(String source) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
//noinspection deprecation
return Html.fromHtml(source);
} else {
return Html.fromHtml(source, Html.FROM_HTML_MODE_COMPACT);
}
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/RestringUtil.java
================================================
package com.ice.restring;
import java.util.Locale;
class RestringUtil {
static String getCurrentLanguage() {
return Locale.getDefault().getLanguage();
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/SharedPrefStringRepository.java
================================================
package com.ice.restring;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* A StringRepository which saves/loads the strings in Shared Preferences.
* it also keeps the strings in memory by using MemoryStringRepository internally for faster access.
* <p>
* it's not ThreadSafe.
*/
class SharedPrefStringRepository implements StringRepository {
private static final String SHARED_PREF_NAME = "Restrings";
private SharedPreferences sharedPreferences;
private StringRepository memoryStringRepository = new MemoryStringRepository();
SharedPrefStringRepository(Context context) {
initSharedPreferences(context);
loadStrings();
}
@Override
public void setStrings(String language, Map<String, String> strings) {
memoryStringRepository.setStrings(language, strings);
saveStrings(language, strings);
}
@Override
public void setString(String language, String key, String value) {
memoryStringRepository.setString(language, key, value);
Map<String, String> keyValues = memoryStringRepository.getStrings(language);
keyValues.put(key, value);
saveStrings(language, keyValues);
}
@Override
public String getString(String language, String key) {
return memoryStringRepository.getString(language, key);
}
@Override
public Map<String, String> getStrings(String language) {
return memoryStringRepository.getStrings(language);
}
private void initSharedPreferences(Context context) {
if (sharedPreferences == null) {
sharedPreferences = context.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
}
}
private void loadStrings() {
Map<String, ?> strings = sharedPreferences.getAll();
for (Map.Entry<String, ?> entry : strings.entrySet()) {
if (!(entry.getValue() instanceof String)) {
continue;
}
String value = (String) entry.getValue();
Map<String, String> keyValues = deserializeKeyValues(value);
String language = entry.getKey();
memoryStringRepository.setStrings(language, keyValues);
}
}
private void saveStrings(String language, Map<String, String> strings) {
String content = serializeKeyValues(strings);
sharedPreferences.edit()
.putString(language, content)
.apply();
}
private Map<String, String> deserializeKeyValues(String content) {
Map<String, String> keyValues = new LinkedHashMap<>();
String[] items = content.split(",");
for (String item : items) {
String[] itemKeyValue = item.split("=");
keyValues.put(itemKeyValue[0], itemKeyValue[1].replaceAll(",,", ","));
}
return keyValues;
}
private String serializeKeyValues(Map<String, String> keyValues) {
StringBuilder content = new StringBuilder();
for (Map.Entry<String, String> item : keyValues.entrySet()) {
content.append(item.getKey())
.append("=")
.append(item.getValue().replaceAll(",", ",,"))
.append(",");
}
content.deleteCharAt(content.length() - 1);
return content.toString();
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/StringRepository.java
================================================
package com.ice.restring;
import java.util.Map;
/**
* Repository of strings.
*/
interface StringRepository {
/**
* Set strings(key, value) for a specific language.
*
* @param language the strings belongs to.
* @param strings new strings for the language.
*/
void setStrings(String language, Map<String, String> strings);
/**
* set a single string(key, value) for a specific language.
*
* @param language the string belongs to.
* @param key the key of the string which is the string resource id.
* @param value the new string.
*/
void setString(String language, String key, String value);
/**
* Get a string for a language & key.
*
* @param language the language of the string.
* @param key the string resource id.
* @return the string if exists, otherwise NULL.
*/
String getString(String language, String key);
/**
* Get all strings for a specific language.
*
* @param language the lanugage of the strings.
* @return the map of string key & values. return empty map if there's no.
*/
Map<String, String> getStrings(String language);
}
================================================
FILE: restring/src/main/java/com/ice/restring/StringsLoaderTask.java
================================================
package com.ice.restring;
import android.os.AsyncTask;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Try to load all strings for different languages by a StringsLoader.
* All string loads happen on background thread, and saving into repository happens on main thread.
* <p>
* FIRST it retrieves all supported languages,
* THEN it retrieves all strings(key, value) for each language.
*/
class StringsLoaderTask extends AsyncTask<Void, Void, Map<String, Map<String, String>>> {
private Restring.StringsLoader stringsLoader;
private StringRepository stringRepository;
StringsLoaderTask(Restring.StringsLoader stringsLoader,
StringRepository stringRepository) {
this.stringsLoader = stringsLoader;
this.stringRepository = stringRepository;
}
public void run() {
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@Override
protected Map<String, Map<String, String>> doInBackground(Void... voids) {
Map<String, Map<String, String>> langStrings = new LinkedHashMap<>();
List<String> languages = stringsLoader.getLanguages();
for (String lang : languages) {
Map<String, String> keyValues = stringsLoader.getStrings(lang);
if (keyValues != null && keyValues.size() > 0) {
langStrings.put(lang, keyValues);
}
}
return langStrings;
}
@Override
protected void onPostExecute(Map<String, Map<String, String>> langStrings) {
for (Map.Entry<String, Map<String, String>> langItem : langStrings.entrySet()) {
stringRepository.setStrings(langItem.getKey(), langItem.getValue());
}
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/SupportToolbarTransformer.java
================================================
package com.ice.restring;
import android.content.res.Resources;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.View;
/**
* A transformer which transforms Toolbar(from support library): it transforms the text set as title.
*/
class SupportToolbarTransformer implements ViewTransformerManager.Transformer {
private static final String ATTRIBUTE_TITLE = "title";
private static final String ATTRIBUTE_APP_TITLE = "app:title";
@Override
public Class<? extends View> getViewType() {
return Toolbar.class;
}
@Override
public View transform(View view, AttributeSet attrs) {
if (view == null || !getViewType().isInstance(view)) {
return view;
}
Resources resources = view.getContext().getResources();
for (int index = 0; index < attrs.getAttributeCount(); index++) {
String attributeName = attrs.getAttributeName(index);
switch (attributeName) {
case ATTRIBUTE_APP_TITLE:
case ATTRIBUTE_TITLE: {
String value = attrs.getAttributeValue(index);
if (value != null && value.startsWith("@")) {
setTitleForView(view, resources.getString(attrs.getAttributeResourceValue(index, 0)));
}
break;
}
}
}
return view;
}
private void setTitleForView(View view, String text) {
((Toolbar) view).setTitle(text);
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/TextViewTransformer.java
================================================
package com.ice.restring;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
/**
* A transformer which transforms TextView(or any view extends it like Button, EditText, ...):
* it transforms "text" & "hint" attributes.
*/
class TextViewTransformer implements ViewTransformerManager.Transformer {
private static final String ATTRIBUTE_TEXT = "text";
private static final String ATTRIBUTE_ANDROID_TEXT = "android:text";
private static final String ATTRIBUTE_HINT = "hint";
private static final String ATTRIBUTE_ANDROID_HINT = "android:hint";
@Override
public Class<? extends View> getViewType() {
return TextView.class;
}
@Override
public View transform(View view, AttributeSet attrs) {
if (view == null || !getViewType().isInstance(view)) {
return view;
}
Resources resources = view.getContext().getResources();
for (int index = 0; index < attrs.getAttributeCount(); index++) {
String attributeName = attrs.getAttributeName(index);
switch (attributeName) {
case ATTRIBUTE_ANDROID_TEXT:
case ATTRIBUTE_TEXT: {
String value = attrs.getAttributeValue(index);
if (value != null && value.startsWith("@")) {
setTextForView(view, resources.getString(attrs.getAttributeResourceValue(index, 0)));
}
break;
}
case ATTRIBUTE_ANDROID_HINT:
case ATTRIBUTE_HINT: {
String value = attrs.getAttributeValue(index);
if (value != null && value.startsWith("@")) {
setHintForView(view, resources.getString(attrs.getAttributeResourceValue(index, 0)));
}
break;
}
}
}
return view;
}
private void setTextForView(View view, String text) {
((TextView) view).setText(text);
}
private void setHintForView(View view, String text) {
((TextView) view).setHint(text);
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/ToolbarTransformer.java
================================================
package com.ice.restring;
import android.annotation.TargetApi;
import android.content.res.Resources;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Toolbar;
/**
* A transformer which transforms Toolbar: it transforms the text set as title.
*/
class ToolbarTransformer implements ViewTransformerManager.Transformer {
private static final String ATTRIBUTE_TITLE = "title";
private static final String ATTRIBUTE_ANDROID_TITLE = "android:title";
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public Class<? extends View> getViewType() {
return Toolbar.class;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public View transform(View view, AttributeSet attrs) {
if (view == null || !getViewType().isInstance(view)) {
return view;
}
Resources resources = view.getContext().getResources();
for (int index = 0; index < attrs.getAttributeCount(); index++) {
String attributeName = attrs.getAttributeName(index);
switch (attributeName) {
case ATTRIBUTE_ANDROID_TITLE:
case ATTRIBUTE_TITLE: {
String value = attrs.getAttributeValue(index);
if (value != null && value.startsWith("@")) {
setTitleForView(view, resources.getString(attrs.getAttributeResourceValue(index, 0)));
}
break;
}
}
}
return view;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setTitleForView(View view, String text) {
((Toolbar) view).setTitle(text);
}
}
================================================
FILE: restring/src/main/java/com/ice/restring/ViewTransformerManager.java
================================================
package com.ice.restring;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
/**
* Manages all view transformers as a central point for layout inflater.
* Layout inflater will ask this manager to transform the inflating views.
*/
class ViewTransformerManager {
private List<Pair<Class<? extends View>, Transformer>> transformers = new ArrayList<>();
/**
* Register a new view transformer to be applied on newly inflating views.
*
* @param transformer to be added to transformers list.
*/
void registerTransformer(Transformer transformer) {
transformers.add(new Pair<>(transformer.getViewType(), transformer));
}
/**
* Transforms a view.
* it tries to find proper transformers for view, and if exists, it will apply them on view,
* and return the final result as a new view.
*
* @param view to be transformed.
* @param attrs attributes of the view.
* @return the transformed view.
*/
View transform(View view, AttributeSet attrs) {
if (view == null) {
return null;
}
View newView = view;
for (Pair<Class<? extends View>, Transformer> pair : transformers) {
Class<? extends View> type = pair.first;
if (!type.isInstance(view)) {
continue;
}
Transformer transformer = pair.second;
newView = transformer.transform(newView, attrs);
}
return newView;
}
/**
* A view transformer skeleton.
*/
interface Transformer {
/**
* The type of view this transformer is for.
*
* @return the type of view.
*/
Class<? extends View> getViewType();
/**
* Apply transformation to a view.
*
* @param view to be transformed.
* @param attrs attributes of the view.
* @return the transformed view.
*/
View transform(View view, AttributeSet attrs);
}
}
================================================
FILE: restring/src/main/res/layout/test_layout.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="@string/header_hint"
android:text="@string/header" />
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/header" />
<android.support.design.widget.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.AppCompat"
app:menu="@menu/test_menu" />
</LinearLayout>
================================================
FILE: restring/src/main/res/menu/test_menu.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu1"
android:title="@string/menu1title"
android:titleCondensed="@string/menu1titleCondensed" />
<item
android:id="@+id/menu2"
android:title="@string/menu2title"
android:titleCondensed="@string/menu2titleCondensed" />
<item
android:id="@+id/menu3"
android:title="@string/menu3title"
android:titleCondensed="@string/menu3titleCondensed" />
</menu>
================================================
FILE: restring/src/main/res/values/strings.xml
================================================
<resources>
<string name="header">header</string>
<string name="header_hint">hint</string>
<string name="menu1title">Menu 1</string>
<string name="menu1titleCondensed">Menu1</string>
<string name="menu2title">Menu 2</string>
<string name="menu2titleCondensed">Menu2</string>
<string name="menu3title">Menu 3</string>
<string name="menu3titleCondensed">Menu3</string>
</resources>
================================================
FILE: restring/src/test/java/com/ice/restring/MemoryStringRepositoryTest.java
================================================
package com.ice.restring;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@RunWith(JUnit4.class)
public class MemoryStringRepositoryTest {
private StringRepository stringRepository;
@Before
public void setUp() {
stringRepository = new MemoryStringRepository();
}
@Test
public void shouldSetAndGetStringPairs() {
final String LANGUAGE = "en";
Map<String, String> strings = generateStrings(10);
stringRepository.setStrings(LANGUAGE, strings);
assertEquals(strings, stringRepository.getStrings(LANGUAGE));
}
@Test
public void shouldGetSingleString() {
final String LANGUAGE = "en";
final int STR_COUNT = 10;
Map<String, String> strings = generateStrings(STR_COUNT);
stringRepository.setStrings(LANGUAGE, strings);
for (int i = 0; i < STR_COUNT; i++) {
assertEquals(stringRepository.getString(LANGUAGE, "key" + i), "value" + i);
}
}
@Test
public void shouldSetSingleString() {
final String LANGUAGE = "en";
final int STR_COUNT = 10;
Map<String, String> strings = generateStrings(STR_COUNT);
stringRepository.setStrings(LANGUAGE, strings);
stringRepository.setString(LANGUAGE, "key5", "aNewValue");
assertEquals(stringRepository.getString(LANGUAGE, "key5"), "aNewValue");
}
private Map<String, String> generateStrings(int count) {
Map<String, String> strings = new LinkedHashMap<>();
for (int i = 0; i < count; i++) {
strings.put("key" + i, "value" + i);
}
return strings;
}
}
================================================
FILE: restring/src/test/java/com/ice/restring/RestringContextWrapperTest.java
================================================
package com.ice.restring;
import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.ice.restring.shadow.MyShadowAssetManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
import java.util.Locale;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {MyShadowAssetManager.class})
public class RestringContextWrapperTest {
private static final int STR_RES_ID = 0x7f0f0123;
private static final String STR_KEY = "STR_KEY";
private static final String STR_VALUE = "STR_VALUE";
private RestringContextWrapper restringContextWrapper;
private Context context;
private Resources originalResources;
@Mock private StringRepository stringRepository;
@Mock private ViewTransformerManager transformerManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
context = RuntimeEnvironment.application;
originalResources = context.getResources();
when(transformerManager.transform(any(), any())).thenAnswer(i -> i.getArgument(0));
restringContextWrapper = RestringContextWrapper.wrap(
context,
stringRepository,
transformerManager
);
}
@Test
public void shouldWrapResourcesAndGetStringsFromRepository() {
((MyShadowAssetManager) Shadow.extract(originalResources.getAssets()))
.addResourceEntryNameForTesting(STR_RES_ID, STR_KEY);
doReturn(STR_VALUE).when(stringRepository).getString(getLanguage(), STR_KEY);
String real = restringContextWrapper.getResources().getString(STR_RES_ID);
assertEquals(STR_VALUE, real);
}
@Test
public void shouldProvideCustomLayoutInflaterToApplyViewTransformation() {
LayoutInflater layoutInflater = (LayoutInflater) restringContextWrapper.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assertTrue(layoutInflater instanceof RestringLayoutInflater);
ViewGroup viewGroup = (ViewGroup) layoutInflater.inflate(R.layout.test_layout, null, false);
ArgumentCaptor<View> captor = ArgumentCaptor.forClass(View.class
gitextract_tfw8tuy5/ ├── .gitignore ├── .travis.yml ├── README.md ├── build.gradle ├── docs/ │ ├── META-INF/ │ │ └── MANIFEST.MF │ ├── allclasses-frame.html │ ├── allclasses-noframe.html │ ├── com/ │ │ └── ice/ │ │ └── restring/ │ │ ├── Restring.StringsLoader.html │ │ ├── Restring.html │ │ ├── RestringConfig.Builder.html │ │ ├── RestringConfig.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ ├── constant-values.html │ ├── deprecated-list.html │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── overview-tree.html │ ├── package-list │ ├── script.js │ └── stylesheet.css ├── example/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── ice/ │ │ └── restring/ │ │ └── example/ │ │ ├── BaseActivity.java │ │ ├── MainActivity.java │ │ ├── SampleApplication.java │ │ └── SampleStringsLoader.java │ └── res/ │ ├── drawable/ │ │ └── ic_launcher_background.xml │ ├── drawable-v24/ │ │ └── ic_launcher_foreground.xml │ ├── layout/ │ │ └── activity_main.xml │ ├── mipmap-anydpi-v26/ │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ └── values/ │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── restring/ │ ├── .gitignore │ ├── bintray.gradle │ ├── build.gradle │ ├── install.gradle │ ├── jacoco.gradle │ ├── proguard-rules.pro │ ├── publish.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── ice/ │ │ │ └── restring/ │ │ │ ├── BottomNavigationViewTransformer.java │ │ │ ├── CustomResourcesContextWrapper.java │ │ │ ├── MemoryStringRepository.java │ │ │ ├── ReflectionUtils.java │ │ │ ├── Restring.java │ │ │ ├── RestringConfig.java │ │ │ ├── RestringContextWrapper.java │ │ │ ├── RestringLayoutInflater.java │ │ │ ├── RestringResources.java │ │ │ ├── RestringUtil.java │ │ │ ├── SharedPrefStringRepository.java │ │ │ ├── StringRepository.java │ │ │ ├── StringsLoaderTask.java │ │ │ ├── SupportToolbarTransformer.java │ │ │ ├── TextViewTransformer.java │ │ │ ├── ToolbarTransformer.java │ │ │ └── ViewTransformerManager.java │ │ └── res/ │ │ ├── layout/ │ │ │ └── test_layout.xml │ │ ├── menu/ │ │ │ └── test_menu.xml │ │ └── values/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── ice/ │ └── restring/ │ ├── MemoryStringRepositoryTest.java │ ├── RestringContextWrapperTest.java │ ├── RestringLayoutInflaterTest.java │ ├── RestringResourcesTest.java │ ├── RestringTest.java │ ├── SharedPrefStringRepositoryTest.java │ ├── StringsLoaderTaskTest.java │ ├── SupportToolbarTransformerTest.java │ ├── TextViewTransformerTest.java │ ├── ToolbarTransformerTest.java │ ├── ViewTransformerManagerTest.java │ ├── activity/ │ │ └── TestActivity.java │ └── shadow/ │ ├── MyShadowAssetManager.java │ └── MyShadowAsyncTask.java ├── settings.gradle └── update_javadoc.sh
SYMBOL INDEX (201 symbols across 36 files)
FILE: docs/script.js
function show (line 1) | function show(type)
function updateTabs (line 16) | function updateTabs(type)
FILE: example/src/main/java/com/ice/restring/example/BaseActivity.java
class BaseActivity (line 12) | public class BaseActivity extends AppCompatActivity {
method attachBaseContext (line 14) | @Override
FILE: example/src/main/java/com/ice/restring/example/MainActivity.java
class MainActivity (line 6) | public class MainActivity extends BaseActivity {
method onCreate (line 8) | @Override
FILE: example/src/main/java/com/ice/restring/example/SampleApplication.java
class SampleApplication (line 8) | public class SampleApplication extends Application {
method onCreate (line 10) | @Override
FILE: example/src/main/java/com/ice/restring/example/SampleStringsLoader.java
class SampleStringsLoader (line 16) | public class SampleStringsLoader implements Restring.StringsLoader {
method getLanguages (line 18) | @Override
method getStrings (line 23) | @Override
FILE: restring/src/main/java/com/ice/restring/BottomNavigationViewTransformer.java
class BottomNavigationViewTransformer (line 21) | class BottomNavigationViewTransformer implements ViewTransformerManager....
method getViewType (line 34) | @Override
method transform (line 39) | @Override
method getMenuItemsStrings (line 80) | private Map<Integer, MenuItemStrings> getMenuItemsStrings(Resources re...
method parseMenu (line 91) | private Map<Integer, MenuItemStrings> parseMenu(XmlPullParser parser, ...
method parseMenuItem (line 147) | private Pair<Integer, MenuItemStrings> parseMenuItem(AttributeSet attr...
class MenuItemStrings (line 185) | private static class MenuItemStrings {
FILE: restring/src/main/java/com/ice/restring/CustomResourcesContextWrapper.java
class CustomResourcesContextWrapper (line 10) | class CustomResourcesContextWrapper extends ContextWrapper {
method CustomResourcesContextWrapper (line 14) | public CustomResourcesContextWrapper(Context base, Resources resources) {
method getResources (line 19) | @Override
FILE: restring/src/main/java/com/ice/restring/MemoryStringRepository.java
class MemoryStringRepository (line 11) | class MemoryStringRepository implements StringRepository {
method setStrings (line 15) | @Override
method setString (line 20) | @Override
method getString (line 28) | @Override
method getStrings (line 36) | @Override
FILE: restring/src/main/java/com/ice/restring/ReflectionUtils.java
class ReflectionUtils (line 14) | class ReflectionUtils {
method getField (line 18) | static Field getField(Class clazz, String fieldName) {
method getValue (line 28) | static Object getValue(Field field, Object obj) {
method setValue (line 36) | static void setValue(Field field, Object obj, Object value) {
method getMethod (line 43) | static Method getMethod(Class clazz, String methodName) {
method invokeMethod (line 54) | static void invokeMethod(Object object, Method method, Object... args) {
FILE: restring/src/main/java/com/ice/restring/Restring.java
class Restring (line 13) | public abstract class Restring {
method init (line 24) | public static void init(Context context) {
method init (line 34) | public static void init(Context context, RestringConfig config) {
method wrapContext (line 50) | public static ContextWrapper wrapContext(Context base) {
method setStrings (line 60) | public static void setStrings(String language, Map<String, String> new...
method setString (line 71) | public static void setString(String language, String key, String value) {
method getStringRepository (line 75) | static StringRepository getStringRepository() {
method initStringRepository (line 79) | private static void initStringRepository(Context context, RestringConf...
method initViewTransformer (line 91) | private static void initViewTransformer() {
type StringsLoader (line 103) | public interface StringsLoader {
method getLanguages (line 110) | List<String> getLanguages();
method getStrings (line 118) | Map<String, String> getStrings(String language);
FILE: restring/src/main/java/com/ice/restring/RestringConfig.java
class RestringConfig (line 6) | public class RestringConfig {
method isPersist (line 11) | public boolean isPersist() {
method getStringsLoader (line 15) | public Restring.StringsLoader getStringsLoader() {
method RestringConfig (line 19) | private RestringConfig() {
class Builder (line 22) | public static class Builder {
method persist (line 26) | public Builder persist(boolean persist) {
method stringsLoader (line 31) | public Builder stringsLoader(Restring.StringsLoader loader) {
method build (line 36) | public RestringConfig build() {
method getDefault (line 44) | static RestringConfig getDefault() {
FILE: restring/src/main/java/com/ice/restring/RestringContextWrapper.java
class RestringContextWrapper (line 10) | class RestringContextWrapper extends ContextWrapper {
method wrap (line 15) | public static RestringContextWrapper wrap(Context context,
method RestringContextWrapper (line 21) | private RestringContextWrapper(Context base,
method getSystemService (line 32) | @Override
FILE: restring/src/main/java/com/ice/restring/RestringLayoutInflater.java
class RestringLayoutInflater (line 24) | class RestringLayoutInflater extends LayoutInflater {
method RestringLayoutInflater (line 36) | protected RestringLayoutInflater(Context context) {
method RestringLayoutInflater (line 41) | RestringLayoutInflater(LayoutInflater original,
method cloneInContext (line 52) | @Override
method initFactories (line 57) | private void initFactories() {
method setFactory (line 68) | @Override
method setFactory2 (line 77) | @Override
method setPrivateFactoryInternal (line 86) | private void setPrivateFactoryInternal() {
method inflate (line 106) | @Override
method onCreateView (line 112) | @Override
method applyChange (line 129) | private View applyChange(View view, AttributeSet attrs) {
class WrapperFactory (line 133) | private class WrapperFactory implements Factory {
method WrapperFactory (line 136) | WrapperFactory(Factory factory) {
method onCreateView (line 140) | @Override
class WrapperFactory2 (line 147) | private class WrapperFactory2 implements Factory2 {
method WrapperFactory2 (line 150) | WrapperFactory2(Factory2 factory2) {
method onCreateView (line 154) | @Override
method onCreateView (line 160) | @Override
method createCustomViewInternal (line 167) | private View createCustomViewInternal(View parent, View view, String n...
class PrivateWrapperFactory2 (line 199) | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
method PrivateWrapperFactory2 (line 204) | public PrivateWrapperFactory2(Factory2 factory2) {
method onCreateView (line 208) | @Override
method onCreateView (line 215) | @Override
FILE: restring/src/main/java/com/ice/restring/RestringResources.java
class RestringResources (line 13) | class RestringResources extends Resources {
method RestringResources (line 17) | RestringResources(@NonNull final Resources res,
method getString (line 23) | @NonNull
method getString (line 33) | @NonNull
method getText (line 43) | @NonNull
method getText (line 53) | @Override
method getStringFromRepository (line 62) | private String getStringFromRepository(int id) {
method fromHtml (line 71) | private CharSequence fromHtml(String source) {
FILE: restring/src/main/java/com/ice/restring/RestringUtil.java
class RestringUtil (line 5) | class RestringUtil {
method getCurrentLanguage (line 7) | static String getCurrentLanguage() {
FILE: restring/src/main/java/com/ice/restring/SharedPrefStringRepository.java
class SharedPrefStringRepository (line 15) | class SharedPrefStringRepository implements StringRepository {
method SharedPrefStringRepository (line 21) | SharedPrefStringRepository(Context context) {
method setStrings (line 26) | @Override
method setString (line 32) | @Override
method getString (line 41) | @Override
method getStrings (line 46) | @Override
method initSharedPreferences (line 51) | private void initSharedPreferences(Context context) {
method loadStrings (line 57) | private void loadStrings() {
method saveStrings (line 71) | private void saveStrings(String language, Map<String, String> strings) {
method deserializeKeyValues (line 78) | private Map<String, String> deserializeKeyValues(String content) {
method serializeKeyValues (line 88) | private String serializeKeyValues(Map<String, String> keyValues) {
FILE: restring/src/main/java/com/ice/restring/StringRepository.java
type StringRepository (line 8) | interface StringRepository {
method setStrings (line 16) | void setStrings(String language, Map<String, String> strings);
method setString (line 25) | void setString(String language, String key, String value);
method getString (line 34) | String getString(String language, String key);
method getStrings (line 42) | Map<String, String> getStrings(String language);
FILE: restring/src/main/java/com/ice/restring/StringsLoaderTask.java
class StringsLoaderTask (line 16) | class StringsLoaderTask extends AsyncTask<Void, Void, Map<String, Map<St...
method StringsLoaderTask (line 21) | StringsLoaderTask(Restring.StringsLoader stringsLoader,
method run (line 27) | public void run() {
method doInBackground (line 31) | @Override
method onPostExecute (line 46) | @Override
FILE: restring/src/main/java/com/ice/restring/SupportToolbarTransformer.java
class SupportToolbarTransformer (line 11) | class SupportToolbarTransformer implements ViewTransformerManager.Transf...
method getViewType (line 16) | @Override
method transform (line 21) | @Override
method setTitleForView (line 44) | private void setTitleForView(View view, String text) {
FILE: restring/src/main/java/com/ice/restring/TextViewTransformer.java
class TextViewTransformer (line 12) | class TextViewTransformer implements ViewTransformerManager.Transformer {
method getViewType (line 19) | @Override
method transform (line 24) | @Override
method setTextForView (line 55) | private void setTextForView(View view, String text) {
method setHintForView (line 59) | private void setHintForView(View view, String text) {
FILE: restring/src/main/java/com/ice/restring/ToolbarTransformer.java
class ToolbarTransformer (line 13) | class ToolbarTransformer implements ViewTransformerManager.Transformer {
method getViewType (line 18) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
method transform (line 24) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
method setTitleForView (line 48) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
FILE: restring/src/main/java/com/ice/restring/ViewTransformerManager.java
class ViewTransformerManager (line 14) | class ViewTransformerManager {
method registerTransformer (line 23) | void registerTransformer(Transformer transformer) {
method transform (line 36) | View transform(View view, AttributeSet attrs) {
type Transformer (line 58) | interface Transformer {
method getViewType (line 64) | Class<? extends View> getViewType();
method transform (line 73) | View transform(View view, AttributeSet attrs);
FILE: restring/src/test/java/com/ice/restring/MemoryStringRepositoryTest.java
class MemoryStringRepositoryTest (line 13) | @RunWith(JUnit4.class)
method setUp (line 18) | @Before
method shouldSetAndGetStringPairs (line 23) | @Test
method shouldGetSingleString (line 33) | @Test
method shouldSetSingleString (line 45) | @Test
method generateStrings (line 57) | private Map<String, String> generateStrings(int count) {
FILE: restring/src/test/java/com/ice/restring/RestringContextWrapperTest.java
class RestringContextWrapperTest (line 32) | @RunWith(RobolectricTestRunner.class)
method setUp (line 45) | @Before
method shouldWrapResourcesAndGetStringsFromRepository (line 59) | @Test
method shouldProvideCustomLayoutInflaterToApplyViewTransformation (line 71) | @Test
method getLanguage (line 86) | private String getLanguage() {
FILE: restring/src/test/java/com/ice/restring/RestringLayoutInflaterTest.java
class RestringLayoutInflaterTest (line 23) | @RunWith(RobolectricTestRunner.class)
method setUp (line 30) | @Before
method shouldTransformViewsOnInflatingLayouts (line 45) | @Test
FILE: restring/src/test/java/com/ice/restring/RestringResourcesTest.java
class RestringResourcesTest (line 25) | @RunWith(RobolectricTestRunner.class)
method setUp (line 38) | @Before
method shouldGetStringFromRepositoryIfExists (line 47) | @Test
method shouldGetStringFromResourceIfNotExists (line 56) | @Test
method shouldGetStringWithParamsFromRepositoryIfExists (line 66) | @Test
method shouldGetStringWithParamsFromResourceIfNotExists (line 76) | @Test
method shouldGetHtmlTextFromRepositoryIfExists (line 87) | @Test
method shouldGetHtmlTextFromResourceIfNotExists (line 97) | @Test
method shouldReturnDefaultHtmlTextFromRepositoryIfResourceIdIsInvalid (line 107) | @Test
method getLanguage (line 117) | private String getLanguage() {
FILE: restring/src/test/java/com/ice/restring/RestringTest.java
class RestringTest (line 31) | @RunWith(RobolectricTestRunner.class)
method setUp (line 35) | @Before
method shouldInflateAndTransformViewsOnActivityCreation (line 47) | @Test
method getLanguage (line 82) | private String getLanguage() {
class MyStringLoader (line 86) | private class MyStringLoader implements Restring.StringsLoader {
method getLanguages (line 88) | @Override
method getStrings (line 93) | @Override
FILE: restring/src/test/java/com/ice/restring/SharedPrefStringRepositoryTest.java
class SharedPrefStringRepositoryTest (line 14) | @RunWith(RobolectricTestRunner.class)
method setUp (line 17) | @Before
method shouldSetAndGetStringPairs (line 21) | @Test
method shouldGetSingleString (line 33) | @Test
method shouldSetSingleString (line 48) | @Test
method generateStrings (line 62) | private Map<String, String> generateStrings(int count) {
FILE: restring/src/test/java/com/ice/restring/StringsLoaderTaskTest.java
class StringsLoaderTaskTest (line 25) | @RunWith(RobolectricTestRunner.class)
method setUp (line 29) | @Before
method shouldLoadStringsAndSaveInRepository (line 33) | @Test
FILE: restring/src/test/java/com/ice/restring/SupportToolbarTransformerTest.java
class SupportToolbarTransformerTest (line 26) | @RunWith(RobolectricTestRunner.class)
method setUp (line 35) | @Before
method shouldTransformToolbar (line 40) | @Test
method shouldRejectOtherViewTypes (line 55) | @Test
method getContext (line 67) | private Context getContext() {
method getAttributeSet (line 77) | private AttributeSet getAttributeSet(boolean withAppPrefix) {
FILE: restring/src/test/java/com/ice/restring/TextViewTransformerTest.java
class TextViewTransformerTest (line 27) | @RunWith(RobolectricTestRunner.class)
method setUp (line 41) | @Before
method shouldTransformTextView (line 46) | @Test
method shouldTransformExtendedViews (line 63) | @Test
method shouldRejectOtherViewTypes (line 80) | @Test
method getContext (line 92) | private Context getContext() {
method getAttributeSet (line 103) | private AttributeSet getAttributeSet(boolean withAndroidPrefix) {
FILE: restring/src/test/java/com/ice/restring/ToolbarTransformerTest.java
class ToolbarTransformerTest (line 26) | @RunWith(RobolectricTestRunner.class)
method setUp (line 35) | @Before
method shouldTransformToolbar (line 40) | @Test
method shouldRejectOtherViewTypes (line 55) | @Test
method getContext (line 67) | private Context getContext() {
method getAttributeSet (line 77) | private AttributeSet getAttributeSet(boolean withAndroidPrefix) {
FILE: restring/src/test/java/com/ice/restring/ViewTransformerManagerTest.java
class ViewTransformerManagerTest (line 19) | @RunWith(RobolectricTestRunner.class)
method setUp (line 24) | @Before
method shouldTransformView (line 29) | @Test
FILE: restring/src/test/java/com/ice/restring/activity/TestActivity.java
class TestActivity (line 11) | public class TestActivity extends AppCompatActivity {
method attachBaseContext (line 13) | @Override
method onCreate (line 18) | @Override
FILE: restring/src/test/java/com/ice/restring/shadow/MyShadowAssetManager.java
class MyShadowAssetManager (line 12) | @Implements(AssetManager.class)
method getResourceText (line 17) | @Override
method getResourceEntryName (line 22) | @Override
method addResourceEntryNameForTesting (line 30) | public void addResourceEntryNameForTesting(int resId, String stringNam...
FILE: restring/src/test/java/com/ice/restring/shadow/MyShadowAsyncTask.java
class MyShadowAsyncTask (line 10) | @Implements(AsyncTask.class)
method executeOnExecutor (line 13) | @Override
Condensed preview — 88 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (238K chars).
[
{
"path": ".gitignore",
"chars": 137,
"preview": "*.iml\n.gradle\n/local.properties\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n.DS_Store\n/build\n/captures\n.ext"
},
{
"path": ".travis.yml",
"chars": 498,
"preview": "language: android\njdk: oraclejdk8\nenv:\n global:\n - ANDROID_TARGET=android-16\n - ANDROID_ABI=armeabi-v7a\n - BUI"
},
{
"path": "README.md",
"chars": 4732,
"preview": "<a href='https://bintray.com/hamidfri/maven/restring/_latestVersion'><img src='https://api.bintray.com/packages/hamidfri"
},
{
"path": "build.gradle",
"chars": 1318,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n\n "
},
{
"path": "docs/META-INF/MANIFEST.MF",
"chars": 23,
"preview": "Manifest-Version: 1.0\n\n"
},
{
"path": "docs/allclasses-frame.html",
"chars": 1130,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/allclasses-noframe.html",
"chars": 1050,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/Restring.StringsLoader.html",
"chars": 8830,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/Restring.html",
"chars": 14212,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/RestringConfig.Builder.html",
"chars": 10718,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/RestringConfig.html",
"chars": 9382,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/package-frame.html",
"chars": 1284,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/package-summary.html",
"chars": 5557,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/com/ice/restring/package-tree.html",
"chars": 4659,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/constant-values.html",
"chars": 3583,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/deprecated-list.html",
"chars": 3533,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/help-doc.html",
"chars": 7968,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/index-all.html",
"chars": 10344,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/index.html",
"chars": 2776,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">\n<!-- NewPage -->\n<"
},
{
"path": "docs/overview-tree.html",
"chars": 4590,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
},
{
"path": "docs/package-list",
"chars": 17,
"preview": "com.ice.restring\n"
},
{
"path": "docs/script.js",
"chars": 827,
"preview": "function show(type)\n{\n count = 0;\n for (var key in methods) {\n var row = document.getElementById(key);\n "
},
{
"path": "docs/stylesheet.css",
"chars": 12842,
"preview": "/* Javadoc style sheet */\n/*\nOverall document style\n*/\n\n@import url('resources/fonts/dejavu.css');\n\nbody {\n backgroun"
},
{
"path": "example/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "example/build.gradle",
"chars": 802,
"preview": "apply plugin: 'com.android.application'\n\nandroid {\n compileSdkVersion rootProject.ext.compileSdkVersion\n buildTool"
},
{
"path": "example/proguard-rules.pro",
"chars": 751,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "example/src/main/AndroidManifest.xml",
"chars": 760,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "example/src/main/java/com/ice/restring/example/BaseActivity.java",
"chars": 523,
"preview": "package com.ice.restring.example;\n\nimport android.content.Context;\nimport android.support.v7.app.AppCompatActivity;\n\nimp"
},
{
"path": "example/src/main/java/com/ice/restring/example/MainActivity.java",
"chars": 395,
"preview": "package com.ice.restring.example;\n\nimport android.os.Bundle;\nimport android.widget.TextView;\n\npublic class MainActivity "
},
{
"path": "example/src/main/java/com/ice/restring/example/SampleApplication.java",
"chars": 497,
"preview": "package com.ice.restring.example;\n\nimport android.app.Application;\n\nimport com.ice.restring.Restring;\nimport com.ice.res"
},
{
"path": "example/src/main/java/com/ice/restring/example/SampleStringsLoader.java",
"chars": 1352,
"preview": "package com.ice.restring.example;\n\nimport com.ice.restring.Restring;\n\nimport java.util.Arrays;\nimport java.util.HashMap;"
},
{
"path": "example/src/main/res/drawable/ic_launcher_background.xml",
"chars": 5606,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:wi"
},
{
"path": "example/src/main/res/drawable-v24/ic_launcher_foreground.xml",
"chars": 1880,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:aapt=\"http://schemas.android.com/aapt\"\n "
},
{
"path": "example/src/main/res/layout/activity_main.xml",
"chars": 1321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.androi"
},
{
"path": "example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "example/src/main/res/values/colors.xml",
"chars": 208,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#3F51B5</color>\n <color name=\"color"
},
{
"path": "example/src/main/res/values/strings.xml",
"chars": 175,
"preview": "<resources>\n <string name=\"app_name\">Restring</string>\n <string name=\"title\">This is title.</string>\n <string n"
},
{
"path": "example/src/main/res/values/styles.xml",
"chars": 383,
"preview": "<resources>\n\n <!-- Base application theme. -->\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 230,
"preview": "#Thu Mar 15 15:49:17 CET 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "gradle.properties",
"chars": 726,
"preview": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will ov"
},
{
"path": "gradlew",
"chars": 5296,
"preview": "#!/usr/bin/env sh\n\n##############################################################################\n##\n## Gradle start up"
},
{
"path": "gradlew.bat",
"chars": 2176,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "restring/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "restring/bintray.gradle",
"chars": 2143,
"preview": "apply plugin: 'com.jfrog.bintray'\n\nversion = libraryVersion\n\n/*\n * Comment the following part if you only want to distri"
},
{
"path": "restring/build.gradle",
"chars": 1284,
"preview": "apply plugin: 'com.android.library'\napply from: 'jacoco.gradle'\n\nandroid {\n compileSdkVersion rootProject.ext.compile"
},
{
"path": "restring/install.gradle",
"chars": 1013,
"preview": "apply plugin: 'com.github.dcendents.android-maven'\n\ngroup = publishedGroupId // Maven Group ID for the artifact\n\ninstall"
},
{
"path": "restring/jacoco.gradle",
"chars": 884,
"preview": "apply plugin: 'jacoco'\n\njacoco {\n toolVersion = '0.8.0'\n}\n\ntasks.withType(Test) {\n jacoco.includeNoLocationClasses"
},
{
"path": "restring/proguard-rules.pro",
"chars": 751,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "restring/publish.gradle",
"chars": 751,
"preview": "ext {\n bintrayRepo = 'maven'\n bintrayName = 'restring'\n\n publishedGroupId = 'com.ice.restring'\n artifact = '"
},
{
"path": "restring/src/main/AndroidManifest.xml",
"chars": 40,
"preview": "<manifest package=\"com.ice.restring\" />\n"
},
{
"path": "restring/src/main/java/com/ice/restring/BottomNavigationViewTransformer.java",
"chars": 7347,
"preview": "package com.ice.restring;\n\nimport android.content.res.Resources;\nimport android.content.res.XmlResourceParser;\nimport an"
},
{
"path": "restring/src/main/java/com/ice/restring/CustomResourcesContextWrapper.java",
"chars": 551,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.ContextWrapper;\nimport android.content"
},
{
"path": "restring/src/main/java/com/ice/restring/MemoryStringRepository.java",
"chars": 1208,
"preview": "package com.ice.restring;\n\nimport java.util.LinkedHashMap;\nimport java.util.Map;\n\n/**\n * A StringRepository which keeps "
},
{
"path": "restring/src/main/java/com/ice/restring/ReflectionUtils.java",
"chars": 1883,
"preview": "package com.ice.restring;\n\nimport android.util.Log;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Invocation"
},
{
"path": "restring/src/main/java/com/ice/restring/Restring.java",
"chars": 3736,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.ContextWrapper;\n\nimport java.util.List"
},
{
"path": "restring/src/main/java/com/ice/restring/RestringConfig.java",
"chars": 1159,
"preview": "package com.ice.restring;\n\n/**\n * Contains configuration properties for initializing Restring.\n */\npublic class Restring"
},
{
"path": "restring/src/main/java/com/ice/restring/RestringContextWrapper.java",
"chars": 1628,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.ContextWrapper;\nimport android.view.La"
},
{
"path": "restring/src/main/java/com/ice/restring/RestringLayoutInflater.java",
"chars": 8094,
"preview": "package com.ice.restring;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.os.Build;"
},
{
"path": "restring/src/main/java/com/ice/restring/RestringResources.java",
"chars": 2457,
"preview": "package com.ice.restring;\n\nimport android.content.res.Resources;\nimport android.os.Build;\nimport android.support.annotat"
},
{
"path": "restring/src/main/java/com/ice/restring/RestringUtil.java",
"chars": 174,
"preview": "package com.ice.restring;\n\nimport java.util.Locale;\n\nclass RestringUtil {\n\n static String getCurrentLanguage() {\n "
},
{
"path": "restring/src/main/java/com/ice/restring/SharedPrefStringRepository.java",
"chars": 3401,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport java.util.L"
},
{
"path": "restring/src/main/java/com/ice/restring/StringRepository.java",
"chars": 1200,
"preview": "package com.ice.restring;\n\nimport java.util.Map;\n\n/**\n * Repository of strings.\n */\ninterface StringRepository {\n\n /*"
},
{
"path": "restring/src/main/java/com/ice/restring/StringsLoaderTask.java",
"chars": 1735,
"preview": "package com.ice.restring;\n\nimport android.os.AsyncTask;\n\nimport java.util.LinkedHashMap;\nimport java.util.List;\nimport j"
},
{
"path": "restring/src/main/java/com/ice/restring/SupportToolbarTransformer.java",
"chars": 1552,
"preview": "package com.ice.restring;\n\nimport android.content.res.Resources;\nimport android.support.v7.widget.Toolbar;\nimport androi"
},
{
"path": "restring/src/main/java/com/ice/restring/TextViewTransformer.java",
"chars": 2209,
"preview": "package com.ice.restring;\n\nimport android.content.res.Resources;\nimport android.util.AttributeSet;\nimport android.view.V"
},
{
"path": "restring/src/main/java/com/ice/restring/ToolbarTransformer.java",
"chars": 1720,
"preview": "package com.ice.restring;\n\nimport android.annotation.TargetApi;\nimport android.content.res.Resources;\nimport android.os."
},
{
"path": "restring/src/main/java/com/ice/restring/ViewTransformerManager.java",
"chars": 2103,
"preview": "package com.ice.restring;\n\nimport android.util.AttributeSet;\nimport android.util.Pair;\nimport android.view.View;\n\nimport"
},
{
"path": "restring/src/main/res/layout/test_layout.xml",
"chars": 924,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "restring/src/main/res/menu/test_menu.xml",
"chars": 563,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <item\n "
},
{
"path": "restring/src/main/res/values/strings.xml",
"chars": 412,
"preview": "<resources>\n <string name=\"header\">header</string>\n <string name=\"header_hint\">hint</string>\n <string name=\"men"
},
{
"path": "restring/src/test/java/com/ice/restring/MemoryStringRepositoryTest.java",
"chars": 1803,
"preview": "package com.ice.restring;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.j"
},
{
"path": "restring/src/test/java/com/ice/restring/RestringContextWrapperTest.java",
"chars": 3193,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.view.Lay"
},
{
"path": "restring/src/test/java/com/ice/restring/RestringLayoutInflaterTest.java",
"chars": 1969,
"preview": "package com.ice.restring;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n"
},
{
"path": "restring/src/test/java/com/ice/restring/RestringResourcesTest.java",
"chars": 4192,
"preview": "package com.ice.restring;\n\nimport android.content.res.Resources;\nimport android.text.Html;\nimport android.text.TextUtils"
},
{
"path": "restring/src/test/java/com/ice/restring/RestringTest.java",
"chars": 4597,
"preview": "package com.ice.restring;\n\nimport android.app.Activity;\nimport android.support.design.widget.BottomNavigationView;\nimpor"
},
{
"path": "restring/src/test/java/com/ice/restring/SharedPrefStringRepositoryTest.java",
"chars": 2404,
"preview": "package com.ice.restring;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.r"
},
{
"path": "restring/src/test/java/com/ice/restring/StringsLoaderTaskTest.java",
"chars": 2181,
"preview": "package com.ice.restring;\n\nimport com.ice.restring.shadow.MyShadowAsyncTask;\n\nimport org.junit.Before;\nimport org.junit."
},
{
"path": "restring/src/test/java/com/ice/restring/SupportToolbarTransformerTest.java",
"chars": 3201,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.support."
},
{
"path": "restring/src/test/java/com/ice/restring/TextViewTransformerTest.java",
"chars": 4633,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.support."
},
{
"path": "restring/src/test/java/com/ice/restring/ToolbarTransformerTest.java",
"chars": 3181,
"preview": "package com.ice.restring;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.support."
},
{
"path": "restring/src/test/java/com/ice/restring/ViewTransformerManagerTest.java",
"chars": 1412,
"preview": "package com.ice.restring;\n\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.widget.TextView;\n\n"
},
{
"path": "restring/src/test/java/com/ice/restring/activity/TestActivity.java",
"chars": 668,
"preview": "package com.ice.restring.activity;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.support.ann"
},
{
"path": "restring/src/test/java/com/ice/restring/shadow/MyShadowAssetManager.java",
"chars": 874,
"preview": "package com.ice.restring.shadow;\n\n\nimport android.content.res.AssetManager;\n\nimport org.robolectric.annotation.Implement"
},
{
"path": "restring/src/test/java/com/ice/restring/shadow/MyShadowAsyncTask.java",
"chars": 501,
"preview": "package com.ice.restring.shadow;\n\nimport android.os.AsyncTask;\n\nimport org.robolectric.annotation.Implements;\nimport org"
},
{
"path": "settings.gradle",
"chars": 32,
"preview": "include ':example', ':restring'\n"
},
{
"path": "update_javadoc.sh",
"chars": 903,
"preview": "#!/bin/bash\n\nset -ex\n\n# Lib constants\nREPO=\"git@github.com:hamidness/restring.git\"\nGROUP_ID=\"com.ice.restring\"\nARTIFACT_"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the hamidness/restring GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 88 files (215.2 KB), approximately 58.2k tokens, and a symbol index with 201 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.