summaryrefslogtreecommitdiff
path: root/aboutit
diff options
context:
space:
mode:
authorVictor Häggqvist <[email protected]>2015-01-01 16:28:17 +0100
committerVictor Häggqvist <[email protected]>2015-01-01 16:28:17 +0100
commit5d2f7b4c8f76a1fb7cb8d3d0ad9ca7e6fcc6274a (patch)
tree5c5ed9ccd86d39201c64526c4557ab6c48d69a56 /aboutit
init
Diffstat (limited to '')
-rw-r--r--aboutit-sample/.gitignore1
-rw-r--r--aboutit-sample/build.gradle26
-rw-r--r--aboutit-sample/proguard-rules.pro17
-rw-r--r--aboutit-sample/src/androidTest/java/com/snilius/aboutit/sample/ApplicationTest.java13
-rw-r--r--aboutit-sample/src/main/AndroidManifest.xml25
-rw-r--r--aboutit-sample/src/main/java/com/snilius/aboutit/sample/AboutActivity.java30
-rw-r--r--aboutit-sample/src/main/java/com/snilius/aboutit/sample/MainActivity.java90
-rw-r--r--aboutit-sample/src/main/res/drawable-hdpi/ic_launcher.pngbin0 -> 9397 bytes
-rw-r--r--aboutit-sample/src/main/res/drawable-mdpi/ic_launcher.pngbin0 -> 5237 bytes
-rw-r--r--aboutit-sample/src/main/res/drawable-xhdpi/ic_launcher.pngbin0 -> 14383 bytes
-rw-r--r--aboutit-sample/src/main/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 19388 bytes
-rw-r--r--aboutit-sample/src/main/res/layout/activity_about.xml17
-rw-r--r--aboutit-sample/src/main/res/layout/activity_main.xml41
-rw-r--r--aboutit-sample/src/main/res/layout/toolbar.xml7
-rw-r--r--aboutit-sample/src/main/res/menu/menu_main.xml10
-rw-r--r--aboutit-sample/src/main/res/values-w820dp/dimens.xml6
-rw-r--r--aboutit-sample/src/main/res/values/dimens.xml5
-rw-r--r--aboutit-sample/src/main/res/values/strings.xml20
-rw-r--r--aboutit-sample/src/main/res/values/styles.xml9
-rw-r--r--aboutit/.gitignore1
-rw-r--r--aboutit/build.gradle24
-rw-r--r--aboutit/proguard-rules.pro17
-rw-r--r--aboutit/src/androidTest/java/com/snilius/aboutit/ApplicationTest.java13
-rw-r--r--aboutit/src/main/AndroidManifest.xml8
-rw-r--r--aboutit/src/main/java/com/snilius/aboutit/AboutIt.java232
-rw-r--r--aboutit/src/main/java/com/snilius/aboutit/L.java24
-rw-r--r--aboutit/src/main/res/drawable-hdpi/ic_launcher.pngbin0 -> 9397 bytes
-rw-r--r--aboutit/src/main/res/drawable-mdpi/ic_launcher.pngbin0 -> 5237 bytes
-rw-r--r--aboutit/src/main/res/drawable-xhdpi/ic_launcher.pngbin0 -> 14383 bytes
-rw-r--r--aboutit/src/main/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 19388 bytes
-rw-r--r--aboutit/src/main/res/values/strings.xml3
31 files changed, 639 insertions, 0 deletions
diff --git a/aboutit-sample/.gitignore b/aboutit-sample/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/aboutit-sample/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/aboutit-sample/build.gradle b/aboutit-sample/build.gradle
new file mode 100644
index 0000000..803ffdb
--- /dev/null
+++ b/aboutit-sample/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 21
+ buildToolsVersion "21.1.2"
+
+ defaultConfig {
+ applicationId "com.snilius.aboutit.sample"
+ minSdkVersion 14
+ targetSdkVersion 21
+ versionCode 1
+ versionName "1.0.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(include: ['*.jar'], dir: 'libs')
+ compile 'com.android.support:appcompat-v7:21.0.3'
+ compile project(':aboutit')
+}
diff --git a/aboutit-sample/proguard-rules.pro b/aboutit-sample/proguard-rules.pro
new file mode 100644
index 0000000..7873ee5
--- /dev/null
+++ b/aboutit-sample/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /opt/android-sdk-linux/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# 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 *;
+#}
diff --git a/aboutit-sample/src/androidTest/java/com/snilius/aboutit/sample/ApplicationTest.java b/aboutit-sample/src/androidTest/java/com/snilius/aboutit/sample/ApplicationTest.java
new file mode 100644
index 0000000..62e8d66
--- /dev/null
+++ b/aboutit-sample/src/androidTest/java/com/snilius/aboutit/sample/ApplicationTest.java
@@ -0,0 +1,13 @@
+package com.snilius.aboutit.sample;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
+ */
+public class ApplicationTest extends ApplicationTestCase<Application> {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+} \ No newline at end of file
diff --git a/aboutit-sample/src/main/AndroidManifest.xml b/aboutit-sample/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ec86830
--- /dev/null
+++ b/aboutit-sample/src/main/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.snilius.aboutit.sample" >
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name=".MainActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name=".AboutActivity"
+ android:label="@string/title_activity_about" >
+ </activity>
+ </application>
+
+</manifest>
diff --git a/aboutit-sample/src/main/java/com/snilius/aboutit/sample/AboutActivity.java b/aboutit-sample/src/main/java/com/snilius/aboutit/sample/AboutActivity.java
new file mode 100644
index 0000000..35ce5ab
--- /dev/null
+++ b/aboutit-sample/src/main/java/com/snilius/aboutit/sample/AboutActivity.java
@@ -0,0 +1,30 @@
+package com.snilius.aboutit.sample;
+
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.snilius.aboutit.AboutIt;
+import com.snilius.aboutit.L;
+
+
+public class AboutActivity extends ActionBarActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_about);
+
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setTitle(R.string.about);
+
+ new AboutIt(this).app(R.string.app_name)
+ .buildInfo(BuildConfig.DEBUG, BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME)
+ .copyright("Snilius")
+ .libLicense("AboutIt", "Victor Häggqvist", L.AP2, "https://github.com/victorhaggqvist/aboutit")
+ .toTextView(R.id.about_text);
+ }
+}
diff --git a/aboutit-sample/src/main/java/com/snilius/aboutit/sample/MainActivity.java b/aboutit-sample/src/main/java/com/snilius/aboutit/sample/MainActivity.java
new file mode 100644
index 0000000..f7821b1
--- /dev/null
+++ b/aboutit-sample/src/main/java/com/snilius/aboutit/sample/MainActivity.java
@@ -0,0 +1,90 @@
+package com.snilius.aboutit.sample;
+
+import android.content.Intent;
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Spinner;
+
+import com.snilius.aboutit.AboutIt;
+import com.snilius.aboutit.L;
+
+
+public class MainActivity extends ActionBarActivity implements AdapterView.OnItemSelectedListener {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setTitle(R.string.app_name);
+
+ Spinner spinner = (Spinner) findViewById(R.id.spinner);
+ spinner.setOnItemSelectedListener(this);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_main, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int id = item.getItemId();
+
+ if (id == R.id.action_about) {
+ startActivity(new Intent(this, AboutActivity.class));
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ switch (position) {
+ case 0: // all components
+ new AboutIt(this).app("Sample App")
+ .copyright("Example Business")
+ .year(2014)
+ .buildInfo(BuildConfig.DEBUG, BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME)
+ .description(R.string.sample_description)
+ .libLicense("AboutIt", "Victor Häggqvist", L.AP2, "https://github.com/victorhaggqvist/aboutit")
+ .toTextView(R.id.sample_text);
+ break;
+ case 1: // dynamic version only
+ new AboutIt(this).app("Sample App")
+ .copyright("Example Business")
+ .year(2014)
+ .buildInfo(BuildConfig.DEBUG, BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME)
+ .toTextView(R.id.sample_text);
+ break;
+ case 2: // library list
+ new AboutIt(this)
+ .libLicense("Lib2", "Random guy", L.MIT, "https://example.com")
+ .libLicense("AboutIt", "Victor Häggqvist", L.AP2, "https://github.com/victorhaggqvist/aboutit")
+ .toTextView(R.id.sample_text);
+ break;
+ case 3: // custom version
+ new AboutIt(this).app("Sample App")
+ .copyright("Example Business")
+ .buildInfo(BuildConfig.DEBUG, BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME)
+ .release("beta")
+ .toTextView(R.id.sample_text);
+ break;
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+
+ }
+}
diff --git a/aboutit-sample/src/main/res/drawable-hdpi/ic_launcher.png b/aboutit-sample/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..96a442e
--- /dev/null
+++ b/aboutit-sample/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit-sample/src/main/res/drawable-mdpi/ic_launcher.png b/aboutit-sample/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..359047d
--- /dev/null
+++ b/aboutit-sample/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit-sample/src/main/res/drawable-xhdpi/ic_launcher.png b/aboutit-sample/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..71c6d76
--- /dev/null
+++ b/aboutit-sample/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit-sample/src/main/res/drawable-xxhdpi/ic_launcher.png b/aboutit-sample/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..4df1894
--- /dev/null
+++ b/aboutit-sample/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit-sample/src/main/res/layout/activity_about.xml b/aboutit-sample/src/main/res/layout/activity_about.xml
new file mode 100644
index 0000000..ddd4863
--- /dev/null
+++ b/aboutit-sample/src/main/res/layout/activity_about.xml
@@ -0,0 +1,17 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="com.snilius.aboutit.sample.AboutActivity">
+
+ <include layout="@layout/toolbar" />
+
+ <TextView
+ android:id="@+id/about_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/toolbar"
+ android:padding="16dp"
+ android:text="@string/hello_world" />
+
+</RelativeLayout>
diff --git a/aboutit-sample/src/main/res/layout/activity_main.xml b/aboutit-sample/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..9670712
--- /dev/null
+++ b/aboutit-sample/src/main/res/layout/activity_main.xml
@@ -0,0 +1,41 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".MainActivity">
+
+ <include layout="@layout/toolbar" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin">
+
+ <TextView
+ android:id="@+id/description"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:text="@string/description" />
+
+ <Spinner
+ android:id="@+id/spinner"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:entries="@array/examples"
+ android:paddingTop="16dp"
+ android:spinnerMode="dropdown" />
+
+ <TextView
+ android:id="@+id/sample_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="16dp" />
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/aboutit-sample/src/main/res/layout/toolbar.xml b/aboutit-sample/src/main/res/layout/toolbar.xml
new file mode 100644
index 0000000..0df34f8
--- /dev/null
+++ b/aboutit-sample/src/main/res/layout/toolbar.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?attr/colorPrimary"
+ android:minHeight="?attr/actionBarSize"/>
diff --git a/aboutit-sample/src/main/res/menu/menu_main.xml b/aboutit-sample/src/main/res/menu/menu_main.xml
new file mode 100644
index 0000000..d46dc2e
--- /dev/null
+++ b/aboutit-sample/src/main/res/menu/menu_main.xml
@@ -0,0 +1,10 @@
+<menu 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"
+ tools:context=".MainActivity">
+ <item
+ android:id="@+id/action_about"
+ android:orderInCategory="100"
+ android:title="@string/action_about"
+ app:showAsAction="never" />
+</menu>
diff --git a/aboutit-sample/src/main/res/values-w820dp/dimens.xml b/aboutit-sample/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 0000000..63fc816
--- /dev/null
+++ b/aboutit-sample/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+<resources>
+ <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+ (such as screen margins) for screens with more than 820dp of available width. This
+ would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+ <dimen name="activity_horizontal_margin">64dp</dimen>
+</resources>
diff --git a/aboutit-sample/src/main/res/values/dimens.xml b/aboutit-sample/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..47c8224
--- /dev/null
+++ b/aboutit-sample/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+<resources>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/aboutit-sample/src/main/res/values/strings.xml b/aboutit-sample/src/main/res/values/strings.xml
new file mode 100644
index 0000000..5cf9045
--- /dev/null
+++ b/aboutit-sample/src/main/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">AboutIt Sample</string>
+ <string name="hello_world">Hello world!</string>
+ <string name="action_settings">Settings</string>
+ <string name="title_activity_about">AboutActivity</string>
+ <string name="description">This is a sampel application to demonstrate the AboutIt Library, https://github.com/victorhaggqvist/aboutit. A library to assist in creation/genaration of the about-page for your app.</string>
+ <string name="action_about">About</string>
+ <string name="about">About</string>
+ <string name="sample_description">Lorem ipsum dolor sit amet, pri ex vidit iuvaret. Cu mea nullam definiebas appellantur, ut mollis virtute accusata mea, eum eius omittantur et. Et errem dolorum his, mei inani convenire torquatos ei, nostrum explicari principes mel an. Qui modo eirmod alienum an, ius ex suas accusamus rationibus. Eros quas et vix, hinc everti no usu.</string>
+
+ <array name="examples">
+ <item>All components</item>
+ <item>Dynamic version</item>
+ <item>Library list</item>
+ <item>Custom version</item>
+ </array>
+
+</resources>
diff --git a/aboutit-sample/src/main/res/values/styles.xml b/aboutit-sample/src/main/res/values/styles.xml
new file mode 100644
index 0000000..6a7efa0
--- /dev/null
+++ b/aboutit-sample/src/main/res/values/styles.xml
@@ -0,0 +1,9 @@
+<resources>
+
+ <!-- Base application theme. -->
+ <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
+ <item name="colorPrimary">#4CAF50</item>
+ <item name="colorPrimaryDark">#1B5E20</item>
+ </style>
+
+</resources>
diff --git a/aboutit/.gitignore b/aboutit/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/aboutit/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/aboutit/build.gradle b/aboutit/build.gradle
new file mode 100644
index 0000000..db556e0
--- /dev/null
+++ b/aboutit/build.gradle
@@ -0,0 +1,24 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 21
+ buildToolsVersion "21.1.2"
+
+ defaultConfig {
+ minSdkVersion 14
+ targetSdkVersion 21
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile 'com.android.support:appcompat-v7:21.0.3'
+}
diff --git a/aboutit/proguard-rules.pro b/aboutit/proguard-rules.pro
new file mode 100644
index 0000000..7873ee5
--- /dev/null
+++ b/aboutit/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /opt/android-sdk-linux/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# 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 *;
+#}
diff --git a/aboutit/src/androidTest/java/com/snilius/aboutit/ApplicationTest.java b/aboutit/src/androidTest/java/com/snilius/aboutit/ApplicationTest.java
new file mode 100644
index 0000000..c6f81f4
--- /dev/null
+++ b/aboutit/src/androidTest/java/com/snilius/aboutit/ApplicationTest.java
@@ -0,0 +1,13 @@
+package com.snilius.aboutit;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
+ */
+public class ApplicationTest extends ApplicationTestCase<Application> {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+} \ No newline at end of file
diff --git a/aboutit/src/main/AndroidManifest.xml b/aboutit/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..aa76a22
--- /dev/null
+++ b/aboutit/src/main/AndroidManifest.xml
@@ -0,0 +1,8 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.snilius.aboutit">
+
+ <application android:allowBackup="true" android:label="@string/app_name"
+ android:icon="@drawable/ic_launcher">
+
+ </application>
+
+</manifest>
diff --git a/aboutit/src/main/java/com/snilius/aboutit/AboutIt.java b/aboutit/src/main/java/com/snilius/aboutit/AboutIt.java
new file mode 100644
index 0000000..7d52191
--- /dev/null
+++ b/aboutit/src/main/java/com/snilius/aboutit/AboutIt.java
@@ -0,0 +1,232 @@
+package com.snilius.aboutit;
+
+import android.app.Activity;
+import android.text.util.Linkify;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * <h1>AboutIt</h1>
+ * A About-page creator
+ *
+ * <pre>
+ * {@code
+ * new AboutIt(this).app(R.string.app_name)
+ * .buildInfo(BuildConfig.DEBUG, BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME)
+ * .copyright("Example Business")
+ * .libLicense("AboutIt", "Victor Häggqvist", L.AP2, "https://github.com/victorhaggqvist/aboutit")
+ * .toTextView(R.id.about_text);
+ * }
+ * </pre>
+ *
+ * @author Victor Häggqvist
+ * @since 12/29/14
+ * @version 1.0
+ */
+public class AboutIt {
+
+ private String copyright = null;
+ private int year = 0;
+ private int endYear = 0;
+ private List<Lib> libs = new ArrayList<>();
+ private Activity activity;
+ private String appName = null;
+ private boolean debug;
+ private int versionCode;
+ private String versionName;
+ private String releaseName = null;
+ private String description = null;
+
+ /**
+ * Create a page generator
+ * @param activity The aboutpage activity
+ */
+ public AboutIt(Activity activity) {
+
+ this.activity = activity;
+ }
+
+ /**
+ * Generate text and put in @ref{about_text}
+ * @param about_text Resource it of destination TextView
+ */
+ @SuppressWarnings("StringConcatenationInsideStringBufferAppend")
+ public void toTextView(int about_text) {
+ TextView out = (TextView) activity.findViewById(about_text);
+ out.setAutoLinkMask(Linkify.WEB_URLS);
+
+ releaseName = "-"+(releaseName != null?releaseName:(debug?"debug":""));
+ endYear = endYear();
+
+ StringBuilder sb = new StringBuilder();
+ if (appName != null)
+ sb.append(appName+" v"+versionName+" ("+versionCode+releaseName+")\n");
+
+ if (copyright != null) {
+ sb.append("Copyright (c) ");
+ if (year != 0)
+ sb.append(year + (endYear != 0 ? " - " + endYear : "") + " ");
+ sb.append(copyright + "\n\n");
+ }
+
+ if (description != null)
+ sb.append(description+"\n\n");
+
+ // Sort library list alphabeticly by name
+ Collections.sort(libs, new Comparator<Lib>() {
+ @Override
+ public int compare(Lib lhs, Lib rhs) {
+ return lhs.name.compareTo(rhs.name);
+ }
+ });
+
+ for(Lib l:libs){
+ sb.append(l.name + " by " + l.author + " under " + l.license.display() + ", " + l.url + "\n");
+ }
+
+ out.setText(sb.toString());
+ }
+
+ /**
+ * Demiter what endyear to show
+ * @return year to show
+ */
+ private int endYear() {
+ if (endYear != 0) {
+ return endYear;
+ } else {
+ Calendar now = Calendar.getInstance();
+ int yearNow = now.get(Calendar.YEAR);
+ if (year == yearNow)
+ return 0;
+ else
+ return yearNow;
+ }
+ }
+
+ /**
+ * Get String by id
+ * @param stringid String id
+ * @return String
+ */
+ private String s(int stringid) {
+ return activity.getString(stringid);
+ }
+
+ /**
+ * Copyright name
+ * @param copyright Name
+ */
+ public AboutIt copyright(String copyright){
+ this.copyright = copyright;
+ return this;
+ }
+
+ /**
+ * Start copyright year.
+ * If there is no start year no year will be displayed at all.
+ * @param year Year
+ */
+ public AboutIt year(int year) {
+ this.year = year;
+ return this;
+ }
+
+ /**
+ * Add a library to the list
+ * @param name Name of Library
+ * @param author Author of library
+ * @param license Library licanse, defined by L
+ * @param url Url to or otherwise referense to library
+ * @see L
+ */
+ public AboutIt libLicense(String name, String author, L license, String url) {
+ libs.add(new Lib(name, author, license, url));
+ return this;
+ }
+
+ /**
+ * Appname to display
+ * @param stringresource A string resource id
+ */
+ public AboutIt app(int stringresource) {
+ this.appName = s(stringresource);
+ return this;
+ }
+
+ /**
+ * Appname to display
+ * @see #app(int)
+ */
+ public AboutIt app(String appName) {
+ this.appName = appName;
+ return this;
+ }
+
+ /**
+ * Set a custom release name. Override the default name eg. beta
+ * @param releaseName The release name
+ */
+ public AboutIt release(String releaseName){
+ this.releaseName = releaseName;
+ return this;
+ }
+
+ /**
+ * App build info. To be used in conjunktion with the BuildConfig class
+ * {@code .buildInfo(BuildConfig.DEBUG, BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME)}
+ *
+ * @param debug If is debug build
+ * @param versionCode Version code
+ * @param versionName Version name
+ */
+ public AboutIt buildInfo(boolean debug, int versionCode, String versionName) {
+ this.debug = debug;
+ this.versionCode = versionCode;
+ this.versionName = versionName;
+ return this;
+ }
+
+ /**
+ * A longer description
+ * @param stringresource A string resource id
+ */
+ public AboutIt description(int stringresource) {
+ description = s(stringresource);
+ return this;
+ }
+
+ /**
+ * A longer description
+ * @param description The description
+ * @see #description(int)
+ */
+ public AboutIt description(String description) {
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Holder for libraries
+ */
+ private class Lib {
+
+ final String name;
+ final String author;
+ final L license;
+ final String url;
+
+ public Lib(String name, String author, L license, String url) {
+
+ this.name = name;
+ this.author = author;
+ this.license = license;
+ this.url = url;
+ }
+ }
+}
diff --git a/aboutit/src/main/java/com/snilius/aboutit/L.java b/aboutit/src/main/java/com/snilius/aboutit/L.java
new file mode 100644
index 0000000..a66726b
--- /dev/null
+++ b/aboutit/src/main/java/com/snilius/aboutit/L.java
@@ -0,0 +1,24 @@
+package com.snilius.aboutit;
+
+/**
+ * License Definitions
+ * @author Victor Häggqvist
+ * @since 12/29/14
+ */
+public enum L {
+ AP2("Apache License, Version 2.0"), MIT("MIT"), GPL2("GPLv2"), GPL3("GPLv3");
+
+ private String mDisplayname;
+
+ L(String displayname) {
+ mDisplayname = displayname;
+ }
+
+ /**
+ * Get diaplayname for license
+ * @return displaname
+ */
+ public String display() {
+ return mDisplayname;
+ }
+}
diff --git a/aboutit/src/main/res/drawable-hdpi/ic_launcher.png b/aboutit/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..96a442e
--- /dev/null
+++ b/aboutit/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit/src/main/res/drawable-mdpi/ic_launcher.png b/aboutit/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..359047d
--- /dev/null
+++ b/aboutit/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit/src/main/res/drawable-xhdpi/ic_launcher.png b/aboutit/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..71c6d76
--- /dev/null
+++ b/aboutit/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit/src/main/res/drawable-xxhdpi/ic_launcher.png b/aboutit/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..4df1894
--- /dev/null
+++ b/aboutit/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/aboutit/src/main/res/values/strings.xml b/aboutit/src/main/res/values/strings.xml
new file mode 100644
index 0000000..9b430f7
--- /dev/null
+++ b/aboutit/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">AboutIt</string>
+</resources>