This commit is contained in:
lunaticbum 2024-11-12 14:25:30 +09:00
parent 256a13b7df
commit 4b51b9807a
137 changed files with 10303 additions and 6630 deletions

View File

@ -1 +0,0 @@
/build

View File

@ -1,15 +0,0 @@
apply plugin: 'java'
//apply plugin: 'com.novoda.bintray-release'
//publish {
// userOrg = 'thefinestartist'
// groupId = 'com.thefinestartist'
// artifactId = 'annotations'
// publishVersion = rootProject.ext.versionName
// desc = 'Context free and basic utils to build Android project conveniently.'
// website = 'https://github.com/TheFinestArtist/AndroidBaseUtils'
//}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

View File

@ -154,10 +154,10 @@
</receiver>
<activity
android:name="com.wuadam.awesomewebview.AwesomeWebViewActivity"
android:name="kr.lunaticbum.awesomewebview.AwesomeWebViewActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:hardwareAccelerated="true"
android:theme="@style/FinestWebViewTheme.Light" />
android:theme="@style/FinestWebViewTheme.Fullscreen" />
<provider
android:name="androidx.core.content.FileProvider"

View File

@ -1,168 +1,168 @@
package android.print;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class PDFPrint {
public static void generatePDFFromHTML(final Context context, final File file, final String htmlString, final OnPDFPrintListener onPDFPrintListener) {
final WebView mWebView = new WebView(context);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
PrintAttributes printAttributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("RESOLUTION_ID", "RESOLUTION_ID", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS)
.build();
final PrintDocumentAdapter documentAdapter = mWebView.createPrintDocumentAdapter(file.getName());
documentAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
@Override
public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(file), null, new PrintDocumentAdapter.WriteResultCallback() {
@Override
public void onWriteCancelled() {
super.onWriteCancelled();
onPDFPrintListener.onError(new Exception("PDF Write cancelled."));
}
@Override
public void onWriteFailed(CharSequence error) {
super.onWriteFailed(error);
onPDFPrintListener.onError(new Exception(error.toString()));
}
@Override
public void onWriteFinished(PageRange[] pages) {
super.onWriteFinished(pages);
onPDFPrintListener.onSuccess(file);
}
});
}
}, null);
}
});
mWebView.loadData(htmlString.replaceAll("#", "%23"), "text/HTML", "UTF-8");
}
public static void generatePDFFromWebView(final File file, final WebView webView, final OnPDFPrintListener onPDFPrintListener) {
PrintAttributes printAttributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("RESOLUTION_ID", "RESOLUTION_ID", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS)
.build();
final PrintDocumentAdapter documentAdapter = webView.createPrintDocumentAdapter(file.getName());
documentAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
@Override
public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(file), null, new PrintDocumentAdapter.WriteResultCallback() {
@Override
public void onWriteCancelled() {
super.onWriteCancelled();
onPDFPrintListener.onError(new Exception("PDF Write cancelled."));
}
@Override
public void onWriteFailed(CharSequence error) {
super.onWriteFailed(error);
try {
if (error != null && error.toString().length() > 0) {
onPDFPrintListener.onError(new Exception(error.toString()));
} else {
onPDFPrintListener.onError(new Exception("Empty Page"));
}
}catch (Exception e) {e.printStackTrace();}
}
@Override
public void onWriteFinished(PageRange[] pages) {
super.onWriteFinished(pages);
onPDFPrintListener.onSuccess(file);
}
});
}
}, null);
}
private static ParcelFileDescriptor getOutputFile(File file) {
try {
if (!file.exists()) {
file.createNewFile();
}
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static PrintJob printPDF(final Activity activity, final File pdfFileToPrint, final PrintAttributes printAttributes) {
PrintManager printManager = (PrintManager) activity.getSystemService(Context.PRINT_SERVICE);
String jobName = Long.valueOf(System.currentTimeMillis()).toString();
return printManager.print(jobName, new PrintDocumentAdapter() {
@Override
public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) {
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(pdfFileToPrint);
output = new FileOutputStream(destination.getFileDescriptor());
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
if (cancellationSignal.isCanceled()) {
callback.onLayoutCancelled();
return;
}
PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(pdfFileToPrint.getName()).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();
callback.onLayoutFinished(pdi, true);
}
}, printAttributes);
}
public interface OnPDFPrintListener {
void onSuccess(File file);
void onError(Exception exception);
}
}
//package android.print;
//
//import android.app.Activity;
//import android.content.Context;
//import android.os.Bundle;
//import android.os.CancellationSignal;
//import android.os.ParcelFileDescriptor;
//import android.webkit.WebView;
//import android.webkit.WebViewClient;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//
//public class PDFPrint {
//
// public static void generatePDFFromHTML(final Context context, final File file, final String htmlString, final OnPDFPrintListener onPDFPrintListener) {
// final WebView mWebView = new WebView(context);
// mWebView.setWebViewClient(new WebViewClient() {
// @Override
// public void onPageFinished(WebView view, String url) {
// PrintAttributes printAttributes = new PrintAttributes.Builder()
// .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
// .setResolution(new PrintAttributes.Resolution("RESOLUTION_ID", "RESOLUTION_ID", 600, 600))
// .setMinMargins(PrintAttributes.Margins.NO_MARGINS)
// .build();
//
// final PrintDocumentAdapter documentAdapter = mWebView.createPrintDocumentAdapter(file.getName());
// documentAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
// @Override
// public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
// documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(file), null, new PrintDocumentAdapter.WriteResultCallback() {
//
// @Override
// public void onWriteCancelled() {
// super.onWriteCancelled();
// onPDFPrintListener.onError(new Exception("PDF Write cancelled."));
// }
//
// @Override
// public void onWriteFailed(CharSequence error) {
// super.onWriteFailed(error);
// onPDFPrintListener.onError(new Exception(error.toString()));
// }
//
// @Override
// public void onWriteFinished(PageRange[] pages) {
// super.onWriteFinished(pages);
// onPDFPrintListener.onSuccess(file);
// }
// });
// }
// }, null);
// }
// });
// mWebView.loadData(htmlString.replaceAll("#", "%23"), "text/HTML", "UTF-8");
// }
//
// public static void generatePDFFromWebView(final File file, final WebView webView, final OnPDFPrintListener onPDFPrintListener) {
// PrintAttributes printAttributes = new PrintAttributes.Builder()
// .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
// .setResolution(new PrintAttributes.Resolution("RESOLUTION_ID", "RESOLUTION_ID", 600, 600))
// .setMinMargins(PrintAttributes.Margins.NO_MARGINS)
// .build();
//
// final PrintDocumentAdapter documentAdapter = webView.createPrintDocumentAdapter(file.getName());
// documentAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
// @Override
// public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
// documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(file), null, new PrintDocumentAdapter.WriteResultCallback() {
//
// @Override
// public void onWriteCancelled() {
// super.onWriteCancelled();
// onPDFPrintListener.onError(new Exception("PDF Write cancelled."));
// }
//
// @Override
// public void onWriteFailed(CharSequence error) {
// super.onWriteFailed(error);
// try {
// if (error != null && error.toString().length() > 0) {
// onPDFPrintListener.onError(new Exception(error.toString()));
// } else {
// onPDFPrintListener.onError(new Exception("Empty Page"));
// }
// }catch (Exception e) {e.printStackTrace();}
// }
//
// @Override
// public void onWriteFinished(PageRange[] pages) {
// super.onWriteFinished(pages);
// onPDFPrintListener.onSuccess(file);
// }
// });
// }
// }, null);
// }
//
// private static ParcelFileDescriptor getOutputFile(File file) {
// try {
// if (!file.exists()) {
// file.createNewFile();
// }
// return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
//
// public static PrintJob printPDF(final Activity activity, final File pdfFileToPrint, final PrintAttributes printAttributes) {
// PrintManager printManager = (PrintManager) activity.getSystemService(Context.PRINT_SERVICE);
// String jobName = Long.valueOf(System.currentTimeMillis()).toString();
// return printManager.print(jobName, new PrintDocumentAdapter() {
// @Override
// public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) {
// InputStream input = null;
// OutputStream output = null;
//
// try {
//
// input = new FileInputStream(pdfFileToPrint);
// output = new FileOutputStream(destination.getFileDescriptor());
//
// byte[] buf = new byte[1024];
// int bytesRead;
//
// while ((bytesRead = input.read(buf)) > 0) {
// output.write(buf, 0, bytesRead);
// }
//
// callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
//
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// try {
// input.close();
// output.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
//
// @Override
// public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
// if (cancellationSignal.isCanceled()) {
// callback.onLayoutCancelled();
// return;
// }
//
// PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(pdfFileToPrint.getName()).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();
// callback.onLayoutFinished(pdi, true);
// }
// }, printAttributes);
// }
//
// public interface OnPDFPrintListener {
// void onSuccess(File file);
//
// void onError(Exception exception);
// }
//}

View File

@ -341,9 +341,8 @@ internal class LauncherActivity : AppCompatActivity() {
BLog.LOGE("onConfigurationChanged Configuration >> ${newConfig}")
BLog.LOGE("onConfigurationChanged newConfig?.screenWidthDp >> ${newConfig?.screenWidthDp}")
isOpendFold = (newConfig?.screenWidthDp?.toInt() ?: 0 > 700) == true
// binding.viewPager.invalidate()
// binding.viewPager.currentItem = 1
BLog.LOGE("onConfigurationChanged newConfig?.screenHeightDp >> ${newConfig?.screenHeightDp}")
isOpendFold = (newConfig.screenWidthDp * 1.1f) > newConfig.screenHeightDp
}
override fun onNewIntent(intent: Intent?) {

View File

@ -42,7 +42,7 @@ import bums.lunatic.launcher.workers.WorkersDb
import com.google.android.material.imageview.ShapeableImageView
import com.google.gson.Gson
import com.squareup.picasso.Picasso
import com.wuadam.awesomewebview.AwesomeWebView
import kr.lunaticbum.awesomewebview.AwesomeWebView
import io.realm.kotlin.UpdatePolicy
import java.text.SimpleDateFormat
import java.util.Date
@ -78,9 +78,11 @@ internal class RssItemAdapter (
// show(lActivity!!.supportFragmentManager,rss.originPage)
// }
} else {
RssViewer().apply {
show(lActivity!!.supportFragmentManager,rss.originPage)
}
// RssViewer().apply {
// show(lActivity!!.supportFragmentManager,rss.originPage)
// }
AwesomeWebView.Builder(lActivity!!).showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0)
.show(rss.originPage!!)
// openOpera(rss.originPage())
}
}

View File

@ -17,32 +17,3 @@ plugins {
tasks.register<Delete>("clean") {
delete(rootProject.buildDir)
}
ext {
// minSdkVersion = 7
// targetSdkVersion = 23
// compileSdkVersion = 23
// buildToolsVersion = '23.0.2'
//
// sourceCompatibility = JavaVersion.VERSION_1_7
// targetCompatibility = JavaVersion.VERSION_1_7
//
// versionCode = 1
// versionName = '0.9.5'
//
// supportLibVersion = '23.3.0'
// playLibVersion = '8.4.0'
}
//repositories {
// mavenCentral()
// maven {
// url = uri("https://jitpack.io")
// }
// jcenter()
// mavenLocal()
// flatDir {
// dirs("libs")
// }
//}

View File

@ -1,42 +0,0 @@
apply plugin: 'com.android.library'
apply from: 'maven_publish.gradle'
android {
compileSdk 34
defaultConfig {
minSdk 14
//noinspection ExpiredTargetSdkVersion
targetSdk 31
vectorDrawables.useSupportLibrary = true
consumerProguardFiles 'proguard-rules.pro'
}
namespace 'com.wuadam.awesomewebview'
lint {
abortOnError false
}
// https://developer.android.com/build/publish-library/configure-pub-variants?hl=zh-cn#single-pub-var
// https://stackoverflow.com/a/71366104
publishing {
singleVariant('release') {
withSourcesJar()
withJavadocJar()
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.annotation:annotation:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.10.0'
implementation 'com.nineoldandroids:library:2.4.0'
implementation project(':utils')
// implementation("com.thefinestartist:utils:0.9.5")
// api ('com.yanzhenjie:permission:2.0.3') {
// exclude group: 'com.android.support'
// }
}

45
library/build.gradle.kts Normal file
View File

@ -0,0 +1,45 @@
plugins {
id ("com.android.library")
id ("kotlin-android")
}
android {
namespace = "kr.lunaticbum.awesomewebview"
compileSdk = 34
defaultConfig {
// applicationId = "kr.lunaticbum.awesomewebview"
minSdk = 26
targetSdk = 34
// versionCode = 1
// versionName = "0.0.1"
}
buildFeatures {
viewBinding = true
dataBinding = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ("androidx.annotation:annotation:1.9.1")
implementation ("androidx.appcompat:appcompat:1.7.0")
implementation ("com.google.android.material:material:1.12.0")
// implementation ("com.nineoldandroids:library:2.4.0")
implementation ("androidx.core:core-ktx:1.13.1")
implementation(project(":utils"))
}

View File

@ -2,7 +2,7 @@
<application>
<provider
android:name=".helpers.FileProvider4WebView"
android:name="kr.lunaticbum.awesomewebview.helpers.FileProvider4WebView"
android:authorities="${applicationId}.awesome_web_view.file_provider"
android:exported="false"
android:grantUriPermissions="true">

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.enums;
package kr.lunaticbum.awesomewebview.enums;
/**
* Created by Leonardo on 11/14/15.

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import android.text.TextUtils;
import android.util.Base64;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import android.content.Context;
import android.graphics.Bitmap;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import android.graphics.Color;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
/**
* Created by wuzongheng on 2018/2/18.

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import androidx.annotation.Keep;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import java.io.BufferedInputStream;
import java.io.File;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import java.io.File;
import java.io.FileInputStream;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import android.content.Context;
import android.content.pm.PackageManager;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import android.content.Context;
import android.graphics.Typeface;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.helpers;
package kr.lunaticbum.awesomewebview.helpers;
import java.net.MalformedURLException;
import java.net.URL;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.jsInterface;
package kr.lunaticbum.awesomewebview.jsInterface;
import android.webkit.JavascriptInterface;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.jsInterface;
package kr.lunaticbum.awesomewebview.jsInterface;
import android.text.TextUtils;
import android.util.Pair;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.jsInterface;
package kr.lunaticbum.awesomewebview.jsInterface;
import android.annotation.SuppressLint;
import android.os.Handler;
@ -7,7 +7,7 @@ import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import com.wuadam.awesomewebview.views.VideoEnabledWebChromeClient;
import kr.lunaticbum.awesomewebview.views.VideoEnabledWebChromeClient;
public class VideoJsHelper {
private VideoEnabledWebChromeClient videoEnabledWebChromeClient;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.listeners;
package kr.lunaticbum.awesomewebview.listeners;
import android.content.BroadcastReceiver;
import android.content.Context;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.listeners;
package kr.lunaticbum.awesomewebview.listeners;
/**
* Created by TheFinestArtist on 1/26/16.

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.objects;
package kr.lunaticbum.awesomewebview.objects;
import androidx.annotation.StringRes;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.views;
package kr.lunaticbum.awesomewebview.views;
import android.content.Context;
import android.content.res.TypedArray;
@ -13,7 +13,7 @@ import androidx.core.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import com.wuadam.awesomewebview.R;
import kr.lunaticbum.awesomewebview.R;
/**

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.views;
package kr.lunaticbum.awesomewebview.views;
import android.media.MediaPlayer;
import android.view.SurfaceView;

View File

@ -1,4 +1,4 @@
package com.wuadam.awesomewebview.views;
package kr.lunaticbum.awesomewebview.views;
import android.annotation.SuppressLint;
import android.content.Context;
@ -6,7 +6,7 @@ import android.util.AttributeSet;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import com.wuadam.awesomewebview.jsInterface.VideoJsHelper;
import kr.lunaticbum.awesomewebview.jsInterface.VideoJsHelper;
import java.util.Map;

View File

@ -1,75 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/finestWhite">
<layout>
<data>
<FrameLayout
android:id="@+id/webLayout"
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/toolbarHeight" />
android:background="@color/finestWhite">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp">
<FrameLayout
android:id="@+id/webLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/toolbarHeight" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="0dp"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp">
app:elevation="0dp">
<include layout="@layout/toolbar_content" />
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="0dp"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp">
<View
android:id="@+id/gradient"
android:layout_width="match_parent"
android:layout_height="@dimen/defaultDividerHeight"
android:layout_marginTop="@dimen/toolbarHeight"
android:background="@color/finestBlack10" />
<include layout="@layout/toolbar_content" />
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/defaultProgressBarHeight"
android:layout_marginTop="@dimen/toolbarHeight"
android:indeterminate="false"
android:progressDrawable="@drawable/progress_drawable" />
<View
android:id="@+id/gradient"
android:layout_width="match_parent"
android:layout_height="@dimen/defaultDividerHeight"
android:layout_marginTop="@dimen/toolbarHeight"
android:background="@color/finestBlack10" />
<include layout="@layout/menus" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/defaultProgressBarHeight"
android:layout_marginTop="@dimen/toolbarHeight"
android:indeterminate="false"
android:progressDrawable="@drawable/progress_drawable" />
<!-- View where the video will be shown when video goes fullscreen -->
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:visibility="invisible">
<include layout="@layout/menus" />
<!-- View that will be shown while the fullscreen video loads. For example you could include
a "Loading..." message. However, in this particular example this view is actually defined in
view_loading_video.xml and inflated programmatically in ExampleActivity.java. The reason for
this is to keep the main layout (this file) cleaner. -->
<!-- <View
android:id="@+id/videoLoading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible" /> -->
<!-- View where the video will be shown when video goes fullscreen -->
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:visibility="invisible">
</RelativeLayout>
<!-- View that will be shown while the fullscreen video loads. For example you could include
a "Loading..." message. However, in this particular example this view is actually defined in
view_loading_video.xml and inflated programmatically in ExampleActivity.java. The reason for
this is to keep the main layout (this file) cleaner. -->
<!-- <View
android:id="@+id/videoLoading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible" /> -->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@ -10,7 +10,7 @@
android:orientation="vertical"
android:visibility="gone">
<com.wuadam.awesomewebview.views.ShadowLayout
<kr.lunaticbum.awesomewebview.views.ShadowLayout
android:id="@+id/shadowLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -141,5 +141,5 @@
</LinearLayout>
</LinearLayout>
</com.wuadam.awesomewebview.views.ShadowLayout>
</kr.lunaticbum.awesomewebview.views.ShadowLayout>
</RelativeLayout>

View File

@ -1,46 +0,0 @@
apply plugin: 'com.android.library'
//apply plugin: 'com.novoda.bintray-release'
android {
namespace "com.thefinestartist.helpers"
compileSdkVersion 34
// buildToolsVersion '23.0.2'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
abortOnError false
}
defaultConfig {
minSdkVersion 7
targetSdkVersion 33
versionCode 1
versionName '0.9.5'
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// compile "com.thefinestartist:annotations:${rootProject.ext.versionName}"
implementation "com.android.support:appcompat-v7:28.0.0"
implementation "com.android.support:support-annotations:28.0.0"
implementation 'androidx.annotation:annotation-jvm:1.9.1'
// implementation project(':annotations')
// testCompile 'junit:junit:4.12'
}
//publish {
// userOrg = 'thefinestartist'
// groupId = 'com.thefinestartist'
// artifactId = 'utils'
// publishVersion = rootProject.ext.versionName
// desc = 'Context free and basic utils to build Android project conveniently.'
// website = 'https://github.com/TheFinestArtist/AndroidBaseUtils'
//}

34
utils/build.gradle.kts Normal file
View File

@ -0,0 +1,34 @@
plugins {
id ("com.android.library")
id ("kotlin-android")
}
android {
namespace = "kr.lunaticbum.helpers"
compileSdk = 34
defaultConfig {
minSdk = 26
targetSdk = 34
}
buildFeatures {
viewBinding = true
dataBinding = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation ("com.android.support:appcompat-v7:28.0.0")
implementation ("com.android.support:support-annotations:28.0.0")
implementation ("androidx.annotation:annotation-jvm:1.9.1")
implementation ("androidx.core:core-ktx:1.13.1")
}

17
utils/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,17 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/TheFinestArtist/Library/Android/sdk/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 *;
#}

View File

@ -4,8 +4,8 @@ import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import com.thefinestartist.Base;
import com.thefinestartist.utils.preferences.PreferencesUtil;
import kr.lunaticbum.Base;
import kr.lunaticbum.utils.preferences.PreferencesUtil;
import java.util.ArrayList;
import java.util.HashSet;

View File

@ -1 +1 @@
<manifest package="com.thefinestartist.helpers"/>
<manifest package="kr.lunaticbum.helpers"/>

View File

@ -0,0 +1,171 @@
package android.print;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.RequiresApi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
public class PDFPrint {
public static void generatePDFFromHTML(final Context context, final File file, final String htmlString, final OnPDFPrintListener onPDFPrintListener) {
final WebView mWebView = new WebView(context);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
PrintAttributes printAttributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("RESOLUTION_ID", "RESOLUTION_ID", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS)
.build();
final PrintDocumentAdapter documentAdapter = mWebView.createPrintDocumentAdapter(file.getName());
documentAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
@Override
public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(file), null, new PrintDocumentAdapter.WriteResultCallback() {
@Override
public void onWriteCancelled() {
super.onWriteCancelled();
onPDFPrintListener.onError(new Exception("PDF Write cancelled."));
}
@Override
public void onWriteFailed(CharSequence error) {
super.onWriteFailed(error);
onPDFPrintListener.onError(new Exception(error.toString()));
}
@Override
public void onWriteFinished(PageRange[] pages) {
super.onWriteFinished(pages);
onPDFPrintListener.onSuccess(file);
}
});
}
}, null);
}
});
mWebView.loadData(htmlString.replaceAll("#", "%23"), "text/HTML", "UTF-8");
}
public static void generatePDFFromWebView(final File file, final WebView webView, final OnPDFPrintListener onPDFPrintListener) {
PrintAttributes printAttributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("RESOLUTION_ID", "RESOLUTION_ID", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS)
.build();
final PrintDocumentAdapter documentAdapter = webView.createPrintDocumentAdapter(file.getName());
documentAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
@Override
public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(file), null, new PrintDocumentAdapter.WriteResultCallback() {
@Override
public void onWriteCancelled() {
super.onWriteCancelled();
onPDFPrintListener.onError(new Exception("PDF Write cancelled."));
}
@Override
public void onWriteFailed(CharSequence error) {
super.onWriteFailed(error);
try {
if (error != null && error.toString().length() > 0) {
onPDFPrintListener.onError(new Exception(error.toString()));
} else {
onPDFPrintListener.onError(new Exception("Empty Page"));
}
}catch (Exception e) {e.printStackTrace();}
}
@Override
public void onWriteFinished(PageRange[] pages) {
super.onWriteFinished(pages);
onPDFPrintListener.onSuccess(file);
}
});
}
}, null);
}
private static ParcelFileDescriptor getOutputFile(File file) {
try {
if (!file.exists()) {
file.createNewFile();
}
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static PrintJob printPDF(final Activity activity, final File pdfFileToPrint, final PrintAttributes printAttributes) {
PrintManager printManager = (PrintManager) activity.getSystemService(Context.PRINT_SERVICE);
String jobName = Long.valueOf(System.currentTimeMillis()).toString();
return printManager.print(jobName, new PrintDocumentAdapter() {
@Override
public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) {
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(pdfFileToPrint);
output = new FileOutputStream(destination.getFileDescriptor());
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
if (cancellationSignal.isCanceled()) {
callback.onLayoutCancelled();
return;
}
PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(pdfFileToPrint.getName()).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();
callback.onLayoutFinished(pdi, true);
}
}, printAttributes);
}
public interface OnPDFPrintListener {
void onSuccess(File file);
void onError(Exception exception);
}
}

View File

@ -1,57 +0,0 @@
package com.thefinestartist;
import android.content.Context;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import androidx.annotation.NonNull;
/**
* Base helps to get {@link Context}, {@link Resources}, {@link AssetManager}, {@link Configuration} and {@link DisplayMetrics} in any class.
*
* @author Leonardo Taehwan Kim
*/
public class Base {
private static Context context;
public static void initialize(@NonNull Context context) {
Base.context = context;
}
public static Context getContext() {
synchronized (Base.class) {
if (Base.context == null)
throw new NullPointerException("Call Base.initialize(context) within your Application onCreate() method.");
return Base.context.getApplicationContext();
}
}
public static Resources getResources() {
return Base.getContext().getResources();
}
public static Resources.Theme getTheme() {
return Base.getContext().getTheme();
}
public static AssetManager getAssets() {
return Base.getContext().getAssets();
}
public static Configuration getConfiguration() {
return Base.getResources().getConfiguration();
}
public static DisplayMetrics getDisplayMetrics() {
return Base.getResources().getDisplayMetrics();
}
}
// TODO: Thread safety
// TODO: ripple, bitmap, time, contact list, picture list, video list, connectivity, wake lock, screen lock/off/on, get attributes, cookie, audio
// TODO: keystore
// TODO: http://jo.centis1504.net/?p=1189
// TODO: Test codes

View File

@ -1,82 +0,0 @@
package com.thefinestartist.builders;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.thefinestartist.Base;
import com.thefinestartist.utils.content.ContextUtil;
import java.io.Serializable;
import java.util.ArrayList;
/**
* ActivityBuilder helps to build {@link Activity} {@link Intent} and start {@link Activity}.
*
* @author Leonardo Taehwan Kim
*/
public class ActivityBuilder {
final Intent intent;
public <C extends Activity> ActivityBuilder(@NonNull Class<C> clazz) {
intent = new Intent(Base.getContext(), clazz);
}
public <T extends Serializable> ActivityBuilder set(@NonNull String key, T value) {
intent.putExtra(key, value);
return this;
}
public ActivityBuilder set(@NonNull String key, Parcelable value) {
intent.putExtra(key, value);
return this;
}
public ActivityBuilder set(@NonNull String key, Parcelable[] value) {
intent.putExtra(key, value);
return this;
}
public <T extends Parcelable> ActivityBuilder set(@NonNull String key, ArrayList<T> value) {
intent.putExtra(key, value);
return this;
}
public ActivityBuilder remove(@NonNull String key) {
intent.removeExtra(key);
return this;
}
public ActivityBuilder setFlags(int flags) {
intent.setFlags(flags);
return this;
}
public ActivityBuilder addFlags(int flags) {
intent.addFlags(flags);
return this;
}
public Intent buildIntent() {
return intent;
}
public void start() {
ContextUtil.startActivity(intent);
}
public void startForResult(@NonNull Activity activity, int requestCode) {
activity.startActivityForResult(intent, requestCode);
}
@TargetApi(16)
public void startForResult(@NonNull Activity activity, int requestCode, @Nullable Bundle options) {
activity.startActivityForResult(intent, requestCode, options);
}
}

View File

@ -1,43 +0,0 @@
package com.thefinestartist.converters;
import com.thefinestartist.Base;
/**
* UnitConverter helps to convert dp or sp size into pixel.
*
* @author Leonardo Taehwan Kim
*/
public class UnitConverter {
public static float dpToPx(float dp) {
return dp * Base.getDisplayMetrics().density;
}
public static int dpToPx(int dp) {
return (int) (dp * Base.getDisplayMetrics().density + 0.5f);
}
public static float pxToDp(float px) {
return px / Base.getDisplayMetrics().density;
}
public static int pxToDp(int px) {
return (int) (px / Base.getDisplayMetrics().density + 0.5f);
}
public static float spToPx(float sp) {
return sp * Base.getDisplayMetrics().scaledDensity;
}
public static int spToPx(int sp) {
return (int) (sp * Base.getDisplayMetrics().scaledDensity + 0.5f);
}
public static float pxToSp(float px) {
return px / Base.getDisplayMetrics().scaledDensity;
}
public static int pxToSp(int px) {
return (int) (px / Base.getDisplayMetrics().scaledDensity + 0.5f);
}
}

View File

@ -1,502 +0,0 @@
package com.thefinestartist.utils.content;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.ComponentCallbacks;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.UserHandle;
import android.util.AttributeSet;
import androidx.annotation.AttrRes;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.annotation.StyleRes;
import androidx.annotation.StyleableRes;
import androidx.core.content.ContextCompat;
import com.thefinestartist.Base;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* ContextUtil helps to manage {@link Context} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class ContextUtil {
public static boolean bindService(Intent service, ServiceConnection conn, int flags) {
return Base.getContext().bindService(service, conn, flags);
}
public static int checkCallingOrSelfPermission(String permission) {
return Base.getContext().checkCallingOrSelfPermission(permission);
}
public static int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
return Base.getContext().checkCallingOrSelfUriPermission(uri, modeFlags);
}
public static int checkCallingPermission(String permission) {
return Base.getContext().checkCallingPermission(permission);
}
public static int checkCallingUriPermission(Uri uri, int modeFlags) {
return Base.getContext().checkCallingUriPermission(uri, modeFlags);
}
public static int checkPermission(String permission, int pid, int uid) {
return Base.getContext().checkPermission(permission, pid, uid);
}
public static int checkSelfPermission(@NonNull String permission) {
return ContextCompat.checkSelfPermission(Base.getContext(), permission);
}
public static int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
return Base.getContext().checkUriPermission(uri, pid, uid, modeFlags);
}
public static int checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags) {
return Base.getContext().checkUriPermission(uri, readPermission, writePermission, pid, uid, modeFlags);
}
public static Context createPackageContext(String packageName, int flags) throws PackageManager.NameNotFoundException {
return Base.getContext().createPackageContext(packageName, flags);
}
public static String[] databaseList() {
return Base.getContext().databaseList();
}
public static boolean deleteDatabase(String name) {
return Base.getContext().deleteDatabase(name);
}
public static boolean deleteFile(String name) {
return Base.getContext().deleteFile(name);
}
public static void enforceCallingOrSelfPermission(String permission, String message) {
Base.getContext().enforceCallingOrSelfPermission(permission, message);
}
public static void enforceCallingOrSelfUriPermission(Uri uri, int modeFlags, String message) {
Base.getContext().enforceCallingOrSelfUriPermission(uri, modeFlags, message);
}
public static void enforceCallingPermission(String permission, String message) {
Base.getContext().enforceCallingPermission(permission, message);
}
public static void enforceCallingUriPermission(Uri uri, int modeFlags, String message) {
Base.getContext().enforceCallingUriPermission(uri, modeFlags, message);
}
public static void enforcePermission(String permission, int pid, int uid, String message) {
Base.getContext().enforcePermission(permission, pid, uid, message);
}
public static void enforceUriPermission(Uri uri, int pid, int uid, int modeFlags, String message) {
Base.getContext().enforceUriPermission(uri, pid, uid, modeFlags, message);
}
public static void enforceUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags, String message) {
Base.getContext().enforceUriPermission(uri, readPermission, writePermission, pid, uid, modeFlags, message);
}
public static String[] fileList() {
return Base.getContext().fileList();
}
public static Context getApplicationContext() {
return Base.getContext().getApplicationContext();
}
public static ApplicationInfo getApplicationInfo() {
return Base.getContext().getApplicationInfo();
}
public static AssetManager getAssets() {
return Base.getContext().getAssets();
}
public static File getCacheDir() {
return Base.getContext().getCacheDir();
}
public static ClassLoader getClassLoader() {
return Base.getContext().getClassLoader();
}
public static File getCodeCacheDir() {
return ContextCompat.getCodeCacheDir(Base.getContext());
}
@ColorInt
public static int getColor(@ColorRes int colorRes) {
return ContextCompat.getColor(Base.getContext(), colorRes);
}
public static ColorStateList getColorStateList(@ColorRes int colorRes) {
return ContextCompat.getColorStateList(Base.getContext(), colorRes);
}
public static ContentResolver getContentResolver() {
return Base.getContext().getContentResolver();
}
public static File getDatabasePath(String name) {
return Base.getContext().getDatabasePath(name);
}
public static File getDir(String name, int mode) {
return Base.getContext().getDir(name, mode);
}
public static Drawable getDrawable(@DrawableRes int drawableRes) {
return ContextCompat.getDrawable(Base.getContext(), drawableRes);
}
@Nullable
@TargetApi(8)
public static File getExternalCacheDir() {
return Base.getContext().getExternalCacheDir();
}
public static File[] getExternalCacheDirs() {
return ContextCompat.getExternalCacheDirs(Base.getContext());
}
@Nullable
@TargetApi(8)
public static File getExternalFilesDir(String type) {
return Base.getContext().getExternalFilesDir(type);
}
public static File[] getExternalFilesDirs(String type) {
return ContextCompat.getExternalFilesDirs(Base.getContext(), type);
}
@TargetApi(21)
public static File[] getExternalMediaDirs() {
return Base.getContext().getExternalMediaDirs();
}
public static File getFileStreamPath(String name) {
return Base.getContext().getFileStreamPath(name);
}
public static File getFilesDir() {
return Base.getContext().getFilesDir();
}
public static Looper getMainLooper() {
return Base.getContext().getMainLooper();
}
public static File getNoBackupFilesDir() {
return ContextCompat.getNoBackupFilesDir(Base.getContext());
}
@TargetApi(11)
public static File getObbDir() {
return Base.getContext().getObbDir();
}
public static File[] getObbDirs() {
return ContextCompat.getObbDirs(Base.getContext());
}
@TargetApi(8)
public static String getPackageCodePath() {
return Base.getContext().getPackageCodePath();
}
public static PackageManager getPackageManager() {
return Base.getContext().getPackageManager();
}
public static String getPackageName() {
return Base.getContext().getPackageName();
}
@TargetApi(8)
public static String getPackageResourcePath() {
return Base.getContext().getPackageResourcePath();
}
public static Resources getResources() {
return Base.getContext().getResources();
}
public static SharedPreferences getSharedPreferences(String name, int mode) {
return Base.getContext().getSharedPreferences(name, mode);
}
public static String getString(@StringRes int stringRes) {
return Base.getContext().getString(stringRes);
}
public static String getString(@StringRes int stringRes, Object... formatArgs) {
return Base.getContext().getString(stringRes, formatArgs);
}
@TargetApi(23)
public static <T> T getSystemService(Class<T> serviceClass) {
return Base.getContext().getSystemService(serviceClass);
}
public static Object getSystemService(String name) {
return Base.getContext().getSystemService(name);
}
@TargetApi(23)
public static String getSystemServiceName(Class<?> serviceClass) {
return Base.getContext().getSystemServiceName(serviceClass);
}
public static CharSequence getText(@StringRes int stringRes) {
return Base.getContext().getText(stringRes);
}
public static Resources.Theme getTheme() {
return Base.getContext().getTheme();
}
public static Drawable getWallpaper() {
return WallpaperManager.getInstance(Base.getContext()).getDrawable();
}
public static int getWallpaperDesiredMinimumHeight() {
return WallpaperManager.getInstance(Base.getContext()).getDesiredMinimumHeight();
}
public static int getWallpaperDesiredMinimumWidth() {
return WallpaperManager.getInstance(Base.getContext()).getDesiredMinimumWidth();
}
public static void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
Base.getContext().grantUriPermission(toPackage, uri, modeFlags);
}
public static boolean isRestricted() {
return Base.getContext().isRestricted();
}
public static TypedArray obtainStyledAttributes(@StyleableRes int[] attrs) {
return Base.getContext().obtainStyledAttributes(attrs);
}
public static TypedArray obtainStyledAttributes(AttributeSet set, @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
return Base.getContext().obtainStyledAttributes(set, attrs, defStyleAttr, defStyleRes);
}
public static TypedArray obtainStyledAttributes(AttributeSet set, @StyleableRes int[] attrs) {
return Base.getContext().obtainStyledAttributes(set, attrs);
}
public static TypedArray obtainStyledAttributes(@StyleRes int resid, @StyleableRes int[] attrs) {
return Base.getContext().obtainStyledAttributes(resid, attrs);
}
public static FileInputStream openFileInput(String name) throws FileNotFoundException {
return Base.getContext().openFileInput(name);
}
public static FileOutputStream openFileOutput(String name, int mode) throws FileNotFoundException {
return Base.getContext().openFileOutput(name, mode);
}
public static SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
return Base.getContext().openOrCreateDatabase(name, mode, factory);
}
@TargetApi(11)
public static SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
return Base.getContext().openOrCreateDatabase(name, mode, factory, errorHandler);
}
public static Drawable peekWallpaper() {
return WallpaperManager.getInstance(Base.getContext()).peekDrawable();
}
@TargetApi(14)
public static void registerComponentCallbacks(ComponentCallbacks callback) {
Base.getContext().registerComponentCallbacks(callback);
}
public static Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
return Base.getContext().registerReceiver(receiver, filter);
}
public static Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) {
return Base.getContext().registerReceiver(receiver, filter, broadcastPermission, scheduler);
}
// public static void removeStickyBroadcast(Intent intent) {
// Base.getContext().removeStickyBroadcast(intent);
// }
//
// @TargetApi(17)
// public static void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
// Base.getContext().removeStickyBroadcastAsUser(intent, user);
// }
public static void revokeUriPermission(Uri uri, int modeFlags) {
Base.getContext().revokeUriPermission(uri, modeFlags);
}
public static void sendBroadcast(Intent intent, String receiverPermission) {
Base.getContext().sendBroadcast(intent, receiverPermission);
}
public static void sendBroadcast(Intent intent) {
Base.getContext().sendBroadcast(intent);
}
@TargetApi(17)
public static void sendBroadcastAsUser(Intent intent, UserHandle user) {
Base.getContext().sendBroadcastAsUser(intent, user);
}
@TargetApi(17)
public static void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
Base.getContext().sendBroadcastAsUser(intent, user, receiverPermission);
}
public static void sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
Base.getContext().sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);
}
public static void sendOrderedBroadcast(Intent intent, String receiverPermission) {
Base.getContext().sendOrderedBroadcast(intent, receiverPermission);
}
@TargetApi(17)
public static void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
Base.getContext().sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);
}
// public static void sendStickyBroadcast(Intent intent) {
// Base.getContext().sendStickyBroadcast(intent);
// }
//
// @TargetApi(17)
// public static void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
// Base.getContext().sendStickyBroadcastAsUser(intent, user);
// }
//
// public static void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
// Base.getContext().sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras);
// }
//
// @TargetApi(17)
// public static void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
// Base.getContext().sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode, initialData, initialExtras);
// }
public static void setTheme(@StyleRes int styleRes) {
Base.getContext().setTheme(styleRes);
}
@SuppressLint("MissingPermission")
public static void setWallpaper(InputStream data) throws IOException {
WallpaperManager.getInstance(Base.getContext()).setStream(data);
}
@SuppressLint("MissingPermission")
public static void setWallpaper(Bitmap bitmap) throws IOException {
WallpaperManager.getInstance(Base.getContext()).setBitmap(bitmap);
}
public static boolean startActivities(Intent[] intents, Bundle options) {
for (Intent intent : intents)
if (intent != null)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return ContextCompat.startActivities(Base.getContext(), intents, options);
}
public static boolean startActivities(Intent[] intents) {
for (Intent intent : intents)
if (intent != null)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return ContextCompat.startActivities(Base.getContext(), intents);
}
public static void startActivity(@NonNull Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Base.getContext().startActivity(intent);
}
@TargetApi(16)
public static void startActivity(Intent intent, Bundle options) {
Base.getContext().startActivity(intent, options);
}
public static boolean startInstrumentation(ComponentName className, String profileFile, Bundle arguments) {
return Base.getContext().startInstrumentation(className, profileFile, arguments);
}
@TargetApi(16)
public static void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) throws IntentSender.SendIntentException {
Base.getContext().startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags, options);
}
public static void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) throws IntentSender.SendIntentException {
Base.getContext().startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags);
}
public static ComponentName startService(Intent service) {
return Base.getContext().startService(service);
}
public static boolean stopService(Intent service) {
return Base.getContext().stopService(service);
}
public static void unbindService(ServiceConnection conn) {
Base.getContext().unbindService(conn);
}
@TargetApi(14)
public static void unregisterComponentCallbacks(ComponentCallbacks callback) {
Base.getContext().unregisterComponentCallbacks(callback);
}
public static void unregisterReceiver(BroadcastReceiver receiver) {
Base.getContext().unregisterReceiver(receiver);
}
}

View File

@ -1,9 +0,0 @@
package com.thefinestartist.utils.content;
/**
* Res is abbreviation class of {@link ResourcesUtil}.
*
* @author Leonardo Taehwan Kim
*/
public class Res extends ResourcesUtil {
}

View File

@ -1,278 +0,0 @@
package com.thefinestartist.utils.content;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.Movie;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import androidx.annotation.AnimRes;
import androidx.annotation.AnyRes;
import androidx.annotation.ArrayRes;
import androidx.annotation.BoolRes;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.DimenRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntegerRes;
import androidx.annotation.LayoutRes;
import androidx.annotation.PluralsRes;
import androidx.annotation.RawRes;
import androidx.annotation.StringRes;
import androidx.annotation.XmlRes;
import com.thefinestartist.Base;
import com.thefinestartist.utils.etc.APILevel;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
/**
* ResourcesUtil helps to manage {@link Resources} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class ResourcesUtil {
private static void finishPreloading() {
Base.getResources().finishPreloading();
}
private static void flushLayoutCache() {
Base.getResources().flushLayoutCache();
}
public static XmlResourceParser getAnimation(@AnimRes int animRes) {
return Base.getResources().getAnimation(animRes);
}
public static AssetManager getAssets() {
return Base.getResources().getAssets();
}
public static boolean getBoolean(@BoolRes int boolRes) {
return Base.getResources().getBoolean(boolRes);
}
@ColorInt
public static int getColor(@ColorRes int colorRes) {
return ContextUtil.getColor(colorRes);
}
@ColorInt
public static int getColor(@ColorRes int colorRes, Resources.Theme theme) {
if (APILevel.require(23))
return Base.getResources().getColor(colorRes, theme);
else
return getColor(colorRes);
}
public static ColorStateList getColorStateList(@ColorRes int colorRes) {
return ContextUtil.getColorStateList(colorRes);
}
public static ColorStateList getColorStateList(@ColorRes int colorRes, Resources.Theme theme) {
if (APILevel.require(23))
return Base.getResources().getColorStateList(colorRes, theme);
else
return getColorStateList(colorRes);
}
public static Configuration getConfiguration() {
return Base.getConfiguration();
}
public static float getDimension(@DimenRes int dimenRes) {
return Base.getResources().getDimension(dimenRes);
}
public static int getDimensionPixelOffset(@DimenRes int dimenRes) {
return Base.getResources().getDimensionPixelOffset(dimenRes);
}
public static int getDimensionPixelSize(@DimenRes int dimenRes) {
return Base.getResources().getDimensionPixelSize(dimenRes);
}
public static DisplayMetrics getDisplayMetrics() {
return Base.getDisplayMetrics();
}
public static Drawable getDrawable(@DrawableRes int drawableRes) {
return ContextUtil.getDrawable(drawableRes);
}
public static Drawable getDrawable(@DrawableRes int drawableRes, Resources.Theme theme) {
if (APILevel.require(21))
return Base.getResources().getDrawable(drawableRes, theme);
else
return Base.getResources().getDrawable(drawableRes);
}
public static Drawable getDrawableForDensity(@DrawableRes int drawableRes, int density) {
if (APILevel.require(21))
return Base.getResources().getDrawableForDensity(drawableRes, density, Base.getContext().getTheme());
else if (APILevel.require(15))
return Base.getResources().getDrawableForDensity(drawableRes, density);
else
return Base.getResources().getDrawable(drawableRes);
}
public static float getFraction(int id, int base, int pbase) {
return Base.getResources().getFraction(id, base, pbase);
}
public static int getIdentifier(String name, String defType, String defPackage) {
return Base.getResources().getIdentifier(name, defType, defPackage);
}
public static int[] getIntArray(@ArrayRes int arrayRes) {
return Base.getResources().getIntArray(arrayRes);
}
public static int getInteger(@IntegerRes int integerRes) {
return Base.getResources().getInteger(integerRes);
}
public static XmlResourceParser getLayout(@LayoutRes int layoutRes) {
return Base.getResources().getLayout(layoutRes);
}
public static Movie getMovie(@RawRes int rawRes) {
return Base.getResources().getMovie(rawRes);
}
public static String getQuantityString(int id, int quantity, Object... formatArgs) {
return Base.getResources().getQuantityString(id, quantity, formatArgs);
}
public static String getQuantityString(@PluralsRes int pluralsRes, int quantity) throws Resources.NotFoundException {
return Base.getResources().getQuantityString(pluralsRes, quantity);
}
public static CharSequence getQuantityText(int id, int quantity) {
return Base.getResources().getQuantityText(id, quantity);
}
public static String getResourceEntryName(@AnyRes int anyRes) {
return Base.getResources().getResourceEntryName(anyRes);
}
public static String getResourceName(@AnyRes int anyRes) {
return Base.getResources().getResourceName(anyRes);
}
public static String getResourcePackageName(@AnyRes int anyRes) {
return Base.getResources().getResourcePackageName(anyRes);
}
public static String getResourceTypeName(@AnyRes int anyRes) {
return Base.getResources().getResourceTypeName(anyRes);
}
public static String getString(@StringRes int stringRes) {
return Base.getResources().getString(stringRes);
}
public static String getString(@StringRes int stringRes, Object... formatArgs) {
return Base.getResources().getString(stringRes, formatArgs);
}
public static String[] getStringArray(@ArrayRes int arrayRes) {
return Base.getResources().getStringArray(arrayRes);
}
public static Resources getSystem() {
return Base.getResources().getSystem();
}
public static CharSequence getText(@StringRes int stringRes, CharSequence def) {
return Base.getResources().getText(stringRes, def);
}
public static CharSequence getText(@StringRes int stringRes) {
return Base.getResources().getText(stringRes);
}
public static CharSequence[] getTextArray(@ArrayRes int arrayRes) {
return Base.getResources().getTextArray(arrayRes);
}
public static void getValue(String name, TypedValue outValue, boolean resolveRefs) {
Base.getResources().getValue(name, outValue, resolveRefs);
}
public static void getValue(@AnyRes int anyRes, TypedValue outValue, boolean resolveRefs) {
Base.getResources().getValue(anyRes, outValue, resolveRefs);
}
public static void getValueForDensity(@AnyRes int anyRes, int density, TypedValue outValue, boolean resolveRefs) {
if (APILevel.require(15))
Base.getResources().getValueForDensity(anyRes, density, outValue, resolveRefs);
else
Base.getResources().getValue(anyRes, outValue, resolveRefs);
}
public static XmlResourceParser getXml(@XmlRes int xmlRes) {
return Base.getResources().getXml(xmlRes);
}
public static Resources.Theme newTheme() {
return Base.getResources().newTheme();
}
public static TypedArray obtainAttributes(AttributeSet set, int[] attrs) {
return Base.getResources().obtainAttributes(set, attrs);
}
public static TypedArray obtainTypedArray(@ArrayRes int anyRes) {
return Base.getResources().obtainTypedArray(anyRes);
}
public static InputStream openRawResource(@RawRes int rawRes) {
return Base.getResources().openRawResource(rawRes);
}
public static InputStream openRawResource(@RawRes int rawRes, TypedValue value) {
return Base.getResources().openRawResource(rawRes, value);
}
public static AssetFileDescriptor openRawResourceFd(@RawRes int rawRes) {
return Base.getResources().openRawResourceFd(rawRes);
}
public static void parseBundleExtra(String tagName, AttributeSet attrs, Bundle outBundle) throws XmlPullParserException {
Base.getResources().parseBundleExtra(tagName, attrs, outBundle);
}
public static void parseBundleExtras(XmlResourceParser parser, Bundle outBundle) throws XmlPullParserException, IOException {
Base.getResources().parseBundleExtras(parser, outBundle);
}
public static void updateConfiguration(Configuration config, DisplayMetrics metrics) {
Base.getResources().updateConfiguration(config, metrics);
}
// Added methods
public static int[] getColorArray(@ArrayRes int array) {
if (array == 0)
return null;
TypedArray typedArray = Base.getResources().obtainTypedArray(array);
int[] colors = new int[typedArray.length()];
for (int i = 0; i < typedArray.length(); i++)
colors[i] = typedArray.getColor(i, 0);
typedArray.recycle();
return colors;
}
}

View File

@ -1,64 +0,0 @@
package com.thefinestartist.utils.content;
import android.annotation.TargetApi;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.TypedValue;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.StyleRes;
import androidx.annotation.StyleableRes;
import com.thefinestartist.Base;
/**
* ThemeUtil helps to manage {@link Resources.Theme} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class ThemeUtil {
public static void applyStyle(int resId, boolean force) {
Base.getTheme().applyStyle(resId, force);
}
public static void dump(int priority, String tag, String prefix) {
Base.getTheme().dump(priority, tag, prefix);
}
@TargetApi(23)
public static int getChangingConfigurations() {
return Base.getTheme().getChangingConfigurations();
}
public static Drawable getDrawable(@DrawableRes int drawableRes) {
return ResourcesUtil.getDrawable(drawableRes);
}
public static Resources getResources() {
return Base.getResources();
}
public static TypedArray obtainStyledAttributes(@StyleableRes int[] attrs) {
return Base.getTheme().obtainStyledAttributes(attrs);
}
public static TypedArray obtainStyledAttributes(@StyleRes int resid, @StyleableRes int[] attrs) {
return Base.getTheme().obtainStyledAttributes(resid, attrs);
}
public static TypedArray obtainStyledAttributes(AttributeSet set, @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
return Base.getTheme().obtainStyledAttributes(set, attrs, defStyleAttr, defStyleRes);
}
public static boolean resolveAttribute(int resid, TypedValue outValue, boolean resolveRefs) {
return Base.getTheme().resolveAttribute(resid, outValue, resolveRefs);
}
public static void setTo(Resources.Theme other) {
Base.getTheme().setTo(other);
}
}

View File

@ -1,29 +0,0 @@
package com.thefinestartist.utils.content;
import android.util.TypedValue;
import com.thefinestartist.Base;
/**
* TypedValueUtil helps to manage {@link TypedValue} class conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class TypedValueUtil {
public static float applyDimension(int unit, float value) {
return TypedValue.applyDimension(unit, value, Base.getDisplayMetrics());
}
public static float complexToDimension(int data) {
return TypedValue.complexToDimension(data, Base.getDisplayMetrics());
}
public static int complexToDimensionPixelOffset(int data) {
return TypedValue.complexToDimensionPixelOffset(data, Base.getDisplayMetrics());
}
public static int complexToDimensionPixelSize(int data) {
return TypedValue.complexToDimensionPixelSize(data, Base.getDisplayMetrics());
}
}

View File

@ -1,58 +0,0 @@
package com.thefinestartist.utils.etc;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import com.thefinestartist.Base;
/**
* PackageUtil helps to handle methods related to package.
*
* @author Leonardo Taehwan Kim
*/
public class PackageUtil {
public static final String FACEBOOK = "com.facebook.katana";
public static final String TWITTER = "com.twitter.android";
public static final String GOOGLE_PLUS = "com.google.android.apps.plus";
public static final String GMAIL = "com.google.android.gm";
public static final String PINTEREST = "com.pinterest";
public static final String TUMBLR = "com.tumblr";
public static final String FANCY = "com.thefancy.app";
public static final String FLIPBOARD = "flipboard.app";
public static final String KAKAOTALK = "com.kakao.talk";
public static final String KAKAOSTORY = "com.kakao.story";
public static boolean isInstalled(String packageName) {
PackageManager packageManager = Base.getContext().getPackageManager();
try {
packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
public static String getPackageName() {
return Base.getContext().getPackageName();
}
public static void openPlayStore() {
String packageName = Base.getContext().getPackageName();
openPlayStore(packageName);
}
public static void openPlayStore(String packageName) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Base.getContext().startActivity(intent);
} catch (ActivityNotFoundException exception) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageName));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Base.getContext().startActivity(intent);
}
}
}

View File

@ -1,55 +0,0 @@
package com.thefinestartist.utils.etc;
import android.graphics.Typeface;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.collection.SimpleArrayMap;
import com.thefinestartist.Base;
/**
* TypefaceUtil helps to retrieve typeface from assets folder.
*
* @author Leonardo Taehwan Kim
*/
public class TypefaceUtil {
private static final SimpleArrayMap<String, Typeface> cache = new SimpleArrayMap<>();
public static Typeface get(@NonNull String path) {
synchronized (cache) {
if (cache.containsKey(path))
return cache.get(path);
try {
Typeface typeface = Typeface.createFromAsset(Base.getContext().getAssets(), path);
cache.put(path, typeface);
return typeface;
} catch (RuntimeException e) {
return null;
}
}
}
public static void setTypeface(@NonNull String path, TextView... textViews) {
if (textViews == null)
return;
for (TextView textView : textViews)
if (textView != null)
textView.setTypeface(get(path));
}
public static void setTypeface(@NonNull String path, boolean includeFontPadding, TextView... textViews) {
if (textViews == null)
return;
for (TextView textView : textViews) {
if (textView != null) {
textView.setTypeface(get(path));
textView.setIncludeFontPadding(includeFontPadding);
}
}
}
}

View File

@ -1,9 +0,0 @@
package com.thefinestartist.utils.log;
/**
* L is abbreviation class of {@link LogUtil}.
*
* @author Leonardo Taehwan Kim
*/
public class L extends LogUtil {
}

View File

@ -1,702 +0,0 @@
package com.thefinestartist.utils.log;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.StringRes;
import com.thefinestartist.enums.LogLevel;
import com.thefinestartist.utils.content.ResourcesUtil;
import com.thefinestartist.utils.etc.APILevel;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Arrays;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
/**
* LogHelper helps to deal with {@link Log} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class LogHelper {
private static final int INDENT_SPACES = 4;
// http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%E2%94%80-%E2%95%BF%EF%BF%A8%5D
private static final String TOP_DIVIDER = "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━";
private static final String MIDDLE_DIVIDER = "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━";
private static final String BOTTOM_DIVIDER = "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━";
protected Settings settings = new Settings(LogHelper.class.getSimpleName());
// Constructors
public LogHelper() {
}
public LogHelper(String tag) {
settings.setTag(tag);
}
public LogHelper(@StringRes int tagRes) {
settings.setTag(ResourcesUtil.getString(tagRes));
}
public LogHelper(Class clazz) {
settings.setTag(clazz.getSimpleName());
}
// Setters
public LogHelper tag(String tag) {
settings.setTag(tag);
return this;
}
public LogHelper tag(@StringRes int tagRes) {
settings.setTag(tagRes);
return this;
}
public LogHelper tag(Class clazz) {
settings.setTag(clazz);
return this;
}
public LogHelper showThreadInfo(boolean showThreadInfo) {
settings.setShowThreadInfo(showThreadInfo);
return this;
}
public LogHelper stackTraceCount(int stackTraceCount) {
settings.setStackTraceCount(stackTraceCount);
return this;
}
public LogHelper logLevel(LogLevel logLevel) {
settings.setLogLevel(logLevel);
return this;
}
public LogHelper showDivider(boolean showDivider) {
settings.setShowDivider(showDivider);
return this;
}
public LogHelper logPrinter(LogPrinter logPrinter) {
settings.setLogPrinter(logPrinter);
return this;
}
// Logging Verbose
public void v(byte message) {
log(LogLevel.VERBOSE, message);
}
public void v(char message) {
log(LogLevel.VERBOSE, message);
}
public void v(short message) {
log(LogLevel.VERBOSE, message);
}
public void v(int message) {
log(LogLevel.VERBOSE, message);
}
public void v(long message) {
log(LogLevel.VERBOSE, message);
}
public void v(float message) {
log(LogLevel.VERBOSE, message);
}
public void v(double message) {
log(LogLevel.VERBOSE, message);
}
public void v(boolean message) {
log(LogLevel.VERBOSE, message);
}
public void v(String message) {
log(LogLevel.VERBOSE, message);
}
public void v(JSONObject message) {
log(LogLevel.VERBOSE, message);
}
public void v(JSONArray message) {
log(LogLevel.VERBOSE, message);
}
public void v(Exception message) {
log(LogLevel.VERBOSE, message);
}
public void v(Object message) {
log(LogLevel.VERBOSE, message);
}
// Logging Debug
public void d(byte message) {
log(LogLevel.DEBUG, message);
}
public void d(char message) {
log(LogLevel.DEBUG, message);
}
public void d(short message) {
log(LogLevel.DEBUG, message);
}
public void d(int message) {
log(LogLevel.DEBUG, message);
}
public void d(long message) {
log(LogLevel.DEBUG, message);
}
public void d(float message) {
log(LogLevel.DEBUG, message);
}
public void d(double message) {
log(LogLevel.DEBUG, message);
}
public void d(boolean message) {
log(LogLevel.DEBUG, message);
}
public void d(String message) {
log(LogLevel.DEBUG, message);
}
public void d(JSONObject message) {
log(LogLevel.DEBUG, message);
}
public void d(JSONArray message) {
log(LogLevel.DEBUG, message);
}
public void d(Exception message) {
log(LogLevel.DEBUG, message);
}
public void d(Object message) {
log(LogLevel.DEBUG, message);
}
// Logging Information
public void i(byte message) {
log(LogLevel.INFO, message);
}
public void i(char message) {
log(LogLevel.INFO, message);
}
public void i(short message) {
log(LogLevel.INFO, message);
}
public void i(int message) {
log(LogLevel.INFO, message);
}
public void i(long message) {
log(LogLevel.INFO, message);
}
public void i(float message) {
log(LogLevel.INFO, message);
}
public void i(double message) {
log(LogLevel.INFO, message);
}
public void i(boolean message) {
log(LogLevel.INFO, message);
}
public void i(String message) {
log(LogLevel.INFO, message);
}
public void i(JSONObject message) {
log(LogLevel.INFO, message);
}
public void i(JSONArray message) {
log(LogLevel.INFO, message);
}
public void i(Exception message) {
log(LogLevel.INFO, message);
}
public void i(Object message) {
log(LogLevel.INFO, message);
}
// Logging Warning
public void w(byte message) {
log(LogLevel.WARN, message);
}
public void w(char message) {
log(LogLevel.WARN, message);
}
public void w(short message) {
log(LogLevel.WARN, message);
}
public void w(int message) {
log(LogLevel.WARN, message);
}
public void w(long message) {
log(LogLevel.WARN, message);
}
public void w(float message) {
log(LogLevel.WARN, message);
}
public void w(double message) {
log(LogLevel.WARN, message);
}
public void w(boolean message) {
log(LogLevel.WARN, message);
}
public void w(String message) {
log(LogLevel.WARN, message);
}
public void w(JSONObject message) {
log(LogLevel.WARN, message);
}
public void w(JSONArray message) {
log(LogLevel.WARN, message);
}
public void w(Exception message) {
log(LogLevel.WARN, message);
}
public void w(Object message) {
log(LogLevel.WARN, message);
}
// Logging Error
public void e(byte message) {
log(LogLevel.ERROR, message);
}
public void e(char message) {
log(LogLevel.ERROR, message);
}
public void e(short message) {
log(LogLevel.ERROR, message);
}
public void e(int message) {
log(LogLevel.ERROR, message);
}
public void e(long message) {
log(LogLevel.ERROR, message);
}
public void e(float message) {
log(LogLevel.ERROR, message);
}
public void e(double message) {
log(LogLevel.ERROR, message);
}
public void e(boolean message) {
log(LogLevel.ERROR, message);
}
public void e(String message) {
log(LogLevel.ERROR, message);
}
public void e(JSONObject message) {
log(LogLevel.ERROR, message);
}
public void e(JSONArray message) {
log(LogLevel.ERROR, message);
}
public void e(Exception message) {
log(LogLevel.ERROR, message);
}
public void e(Object message) {
log(LogLevel.ERROR, message);
}
// Logging Assert
public void wtf(byte message) {
log(LogLevel.ASSERT, message);
}
public void wtf(char message) {
log(LogLevel.ASSERT, message);
}
public void wtf(short message) {
log(LogLevel.ASSERT, message);
}
public void wtf(int message) {
log(LogLevel.ASSERT, message);
}
public void wtf(long message) {
log(LogLevel.ASSERT, message);
}
public void wtf(float message) {
log(LogLevel.ASSERT, message);
}
public void wtf(double message) {
log(LogLevel.ASSERT, message);
}
public void wtf(boolean message) {
log(LogLevel.ASSERT, message);
}
public void wtf(String message) {
log(LogLevel.ASSERT, message);
}
public void wtf(JSONObject message) {
log(LogLevel.ASSERT, message);
}
public void wtf(JSONArray message) {
log(LogLevel.ASSERT, message);
}
public void wtf(Exception message) {
log(LogLevel.ASSERT, message);
}
public void wtf(Object message) {
log(LogLevel.ASSERT, message);
}
// Logging JsonString
public void json(String jsonString) {
json(LogLevel.DEBUG, jsonString);
}
public void json(LogLevel logLevel, String jsonString) {
if (TextUtils.isEmpty(jsonString)) {
log(logLevel, "Json string is empty.");
} else {
jsonString = jsonString.trim();
try {
if (jsonString.startsWith("{")) {
JSONObject jsonObject = new JSONObject(jsonString);
String message = jsonObject.toString(INDENT_SPACES);
log(logLevel, message);
return;
}
if (jsonString.startsWith("[")) {
JSONArray jsonArray = new JSONArray(jsonString);
String message = jsonArray.toString(INDENT_SPACES);
log(logLevel, message);
}
} catch (JSONException e) {
log(logLevel, e);
}
}
}
// Logging XmlString
public void xml(String xmlString) {
xml(LogLevel.DEBUG, xmlString);
}
public void xml(LogLevel logLevel, String xmlString) {
if (TextUtils.isEmpty(xmlString)) {
log(logLevel, "Xml string is empty.");
} else {
if (APILevel.require(8)) {
try {
Source xmlInput = new StreamSource(new StringReader(xmlString));
StreamResult xmlOutput = new StreamResult(new StringWriter());
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(xmlInput, xmlOutput);
log(logLevel, xmlOutput.getWriter().toString().replaceFirst(">", ">\n"));
} catch (TransformerException e) {
log(logLevel, e);
}
} else {
log(logLevel, xmlString);
}
}
}
// Printing
private void log(LogLevel logLevel, byte message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, char message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, short message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, int message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, long message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, float message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, double message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, boolean message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, String.valueOf(message));
}
private void log(LogLevel logLevel, String message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
printString(logLevel, message);
}
private void log(LogLevel logLevel, JSONObject message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
try {
printString(logLevel, message.toString(INDENT_SPACES));
} catch (JSONException e) {
log(logLevel, e);
}
}
private void log(LogLevel logLevel, JSONArray message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
try {
printString(logLevel, message.toString(INDENT_SPACES));
} catch (JSONException e) {
log(logLevel, e);
}
}
private void log(LogLevel logLevel, Exception message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
StringBuilder builder = new StringBuilder();
builder.append(String.valueOf(message));
builder.append("\n");
StackTraceElement[] traces = message.getStackTrace();
for (StackTraceElement trace : traces) {
builder.append(" at ")
.append(trace.getClassName())
.append(".")
.append(trace.getMethodName())
.append("(")
.append(trace.getFileName())
.append(":")
.append(trace.getLineNumber())
.append(")")
.append("\n");
}
printString(logLevel, builder.toString(), true);
}
private void log(LogLevel logLevel, Object message) {
if (logLevel.ordinal() < settings.getLogLevel().ordinal())
return;
String log;
if (message instanceof byte[]) log = Arrays.toString((byte[]) message);
else if (message instanceof char[]) log = Arrays.toString((char[]) message);
else if (message instanceof short[]) log = Arrays.toString((short[]) message);
else if (message instanceof int[]) log = Arrays.toString((int[]) message);
else if (message instanceof long[]) log = Arrays.toString((long[]) message);
else if (message instanceof float[]) log = Arrays.toString((float[]) message);
else if (message instanceof double[]) log = Arrays.toString((double[]) message);
else if (message instanceof boolean[]) log = Arrays.toString((boolean[]) message);
else if (message instanceof Object[]) log = Arrays.toString((Object[]) message);
else log = String.valueOf(message);
printString(logLevel, log);
}
private void printString(LogLevel logLevel, String message) {
printString(logLevel, message, false);
}
private synchronized void printString(LogLevel logLevel, String message, boolean fromException) {
// Create TAG
String TAG = settings.getTag();
if (settings.getShowThreadInfo()) TAG += "(" + Thread.currentThread().getName() + ")";
// Top Divider
if (settings.getShowDivider()) printLine(logLevel, TAG, TOP_DIVIDER);
// Log Content
String[] lines = message.split(System.getProperty("line.separator"));
for (String line : lines)
printLine(logLevel, TAG, settings.getShowDivider() ?
"" + line :
line);
if (settings.getStackTraceCount() > 0 && fromException)
printLine(logLevel, TAG, "Exception occurred");
// Middle Divider
if (settings.getShowDivider()) printLine(logLevel, TAG, MIDDLE_DIVIDER);
// Log Stack Trace
StackTraceElement[] traces = Thread.currentThread().getStackTrace();
int startIndex = 2;
while (LogUtil.class.getCanonicalName().equals(traces[startIndex].getClassName())
|| LogHelper.class.getCanonicalName().equals(traces[startIndex].getClassName()))
startIndex++;
for (int i = startIndex; i < Math.min(traces.length, startIndex + settings.getStackTraceCount()); i++) {
StringBuilder builder = new StringBuilder();
builder.append(" at ")
.append(traces[i].getClassName())
.append(".")
.append(traces[i].getMethodName())
.append("(")
.append(traces[i].getFileName())
.append(":")
.append(traces[i].getLineNumber())
.append(")");
printLine(logLevel, TAG, settings.getShowDivider() ?
"" + builder.toString() :
builder.toString());
}
// Log ellipsized stack trance
int leftTraceCount = traces.length - startIndex - settings.getStackTraceCount();
if (settings.getStackTraceCount() > 0 && leftTraceCount > 1)
printLine(logLevel, TAG, settings.getShowDivider() ?
"┃ at " + leftTraceCount + " more stack traces..." :
" at " + leftTraceCount + " more stack traces...");
if (settings.getStackTraceCount() > 0 && leftTraceCount == 1)
printLine(logLevel, TAG, settings.getShowDivider() ?
"┃ at 1 more stack trace..." :
" at 1 more stack trace...");
// Middle Divider
if (settings.getShowDivider()) printLine(logLevel, TAG, BOTTOM_DIVIDER);
// LogUtil setToDefault
if (this == LogUtil.getInstance()) setToDefault();
}
private void printLine(LogLevel logLevel, String tag, String message) {
switch (logLevel) {
case FULL:
case VERBOSE:
settings.getLogPrinter().v(tag, message);
break;
case DEBUG:
settings.getLogPrinter().d(tag, message);
break;
case INFO:
settings.getLogPrinter().i(tag, message);
break;
case WARN:
settings.getLogPrinter().w(tag, message);
break;
case ERROR:
settings.getLogPrinter().e(tag, message);
break;
case ASSERT:
settings.getLogPrinter().wtf(tag, message);
break;
}
}
protected void setToDefault() {
settings.setTag(LogUtil.getDefaultSettings().getTag());
settings.setShowThreadInfo(LogUtil.getDefaultSettings().getShowThreadInfo());
settings.setStackTraceCount(LogUtil.getDefaultSettings().getStackTraceCount());
settings.setLogLevel(LogUtil.getDefaultSettings().getLogLevel());
settings.setShowDivider(LogUtil.getDefaultSettings().getShowDivider());
}
}

View File

@ -1,406 +0,0 @@
package com.thefinestartist.utils.log;
import android.util.Log;
import androidx.annotation.StringRes;
import com.thefinestartist.enums.LogLevel;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* LogUtil helps to manage application-wide {@link Log} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class LogUtil {
// Defaults
private static Settings defaultSettings = new Settings(LogUtil.class.getSimpleName());
// Singleton
private static volatile LogHelper logHelper = new LogHelper()
.tag(defaultSettings.getTag())
.showThreadInfo(defaultSettings.getShowThreadInfo())
.stackTraceCount(defaultSettings.getStackTraceCount())
.logLevel(defaultSettings.getLogLevel())
.showDivider(defaultSettings.getShowDivider());
public static Settings getDefaultSettings() {
return defaultSettings;
}
public static LogHelper getInstance() {
return logHelper;
}
// Builder
public static LogHelper tag(String tag) {
return logHelper.tag(tag);
}
public static LogHelper tag(@StringRes int tagRes) {
return logHelper.tag(tagRes);
}
public static LogHelper tag(Class clazz) {
return logHelper.tag(clazz);
}
public static LogHelper showThreadInfo(boolean showThreadInfo) {
return logHelper.showThreadInfo(showThreadInfo);
}
public static LogHelper stackTraceCount(int stackTraceCount) {
return logHelper.stackTraceCount(stackTraceCount);
}
public static LogHelper logLevel(LogLevel logLevel) {
return logHelper.logLevel(logLevel);
}
public static LogHelper showDivider(boolean showDivider) {
return logHelper.showDivider(showDivider);
}
public LogHelper logPrinter(LogPrinter logPrinter) {
return logHelper.logPrinter(logPrinter);
}
// Logging Verbose
public static void v(byte message) {
logHelper.v(message);
}
public static void v(char message) {
logHelper.v(message);
}
public static void v(short message) {
logHelper.v(message);
}
public static void v(int message) {
logHelper.v(message);
}
public static void v(long message) {
logHelper.v(message);
}
public static void v(float message) {
logHelper.v(message);
}
public static void v(double message) {
logHelper.v(message);
}
public static void v(boolean message) {
logHelper.v(message);
}
public static void v(String message) {
logHelper.v(message);
}
public static void v(JSONObject message) {
logHelper.v(message);
}
public static void v(JSONArray message) {
logHelper.v(message);
}
public static void v(Exception message) {
logHelper.v(message);
}
public static void v(Object message) {
logHelper.v(message);
}
// Logging Debug
public static void d(byte message) {
logHelper.d(message);
}
public static void d(char message) {
logHelper.d(message);
}
public static void d(short message) {
logHelper.d(message);
}
public static void d(int message) {
logHelper.d(message);
}
public static void d(long message) {
logHelper.d(message);
}
public static void d(float message) {
logHelper.d(message);
}
public static void d(double message) {
logHelper.d(message);
}
public static void d(boolean message) {
logHelper.d(message);
}
public static void d(String message) {
logHelper.d(message);
}
public static void d(JSONObject message) {
logHelper.d(message);
}
public static void d(JSONArray message) {
logHelper.d(message);
}
public static void d(Exception message) {
logHelper.d(message);
}
public static void d(Object message) {
logHelper.d(message);
}
// Logging Information
public static void i(byte message) {
logHelper.i(message);
}
public static void i(char message) {
logHelper.i(message);
}
public static void i(short message) {
logHelper.i(message);
}
public static void i(int message) {
logHelper.i(message);
}
public static void i(long message) {
logHelper.i(message);
}
public static void i(float message) {
logHelper.i(message);
}
public static void i(double message) {
logHelper.i(message);
}
public static void i(boolean message) {
logHelper.i(message);
}
public static void i(String message) {
logHelper.i(message);
}
public static void i(JSONObject message) {
logHelper.i(message);
}
public static void i(JSONArray message) {
logHelper.i(message);
}
public static void i(Exception message) {
logHelper.i(message);
}
public static void i(Object message) {
logHelper.i(message);
}
// Logging Warning
public static void w(byte message) {
logHelper.w(message);
}
public static void w(char message) {
logHelper.w(message);
}
public static void w(short message) {
logHelper.w(message);
}
public static void w(int message) {
logHelper.w(message);
}
public static void w(long message) {
logHelper.w(message);
}
public static void w(float message) {
logHelper.w(message);
}
public static void w(double message) {
logHelper.w(message);
}
public static void w(boolean message) {
logHelper.w(message);
}
public static void w(String message) {
logHelper.w(message);
}
public static void w(JSONObject message) {
logHelper.w(message);
}
public static void w(JSONArray message) {
logHelper.w(message);
}
public static void w(Exception message) {
logHelper.w(message);
}
public static void w(Object message) {
logHelper.w(message);
}
// Logging Error
public static void e(byte message) {
logHelper.e(message);
}
public static void e(char message) {
logHelper.e(message);
}
public static void e(short message) {
logHelper.e(message);
}
public static void e(int message) {
logHelper.e(message);
}
public static void e(long message) {
logHelper.e(message);
}
public static void e(float message) {
logHelper.e(message);
}
public static void e(double message) {
logHelper.e(message);
}
public static void e(boolean message) {
logHelper.e(message);
}
public static void e(String message) {
logHelper.e(message);
}
public static void e(JSONObject message) {
logHelper.e(message);
}
public static void e(JSONArray message) {
logHelper.e(message);
}
public static void e(Exception message) {
logHelper.e(message);
}
public static void e(Object message) {
logHelper.e(message);
}
// Logging Assert
public static void wtf(byte message) {
logHelper.wtf(message);
}
public static void wtf(char message) {
logHelper.wtf(message);
}
public static void wtf(short message) {
logHelper.wtf(message);
}
public static void wtf(int message) {
logHelper.wtf(message);
}
public static void wtf(long message) {
logHelper.wtf(message);
}
public static void wtf(float message) {
logHelper.wtf(message);
}
public static void wtf(double message) {
logHelper.wtf(message);
}
public static void wtf(boolean message) {
logHelper.wtf(message);
}
public static void wtf(String message) {
logHelper.wtf(message);
}
public static void wtf(JSONObject message) {
logHelper.wtf(message);
}
public static void wtf(JSONArray message) {
logHelper.wtf(message);
}
public static void wtf(Exception message) {
logHelper.wtf(message);
}
public static void wtf(Object message) {
logHelper.wtf(message);
}
// Logging JsonString
public static void json(String jsonString) {
json(LogLevel.DEBUG, jsonString);
}
public static void json(LogLevel logLevel, String jsonString) {
logHelper.json(logLevel, jsonString);
}
// Logging XmlString
public static void xml(String xmlString) {
xml(LogLevel.DEBUG, xmlString);
}
public static void xml(LogLevel logLevel, String jsonString) {
logHelper.xml(logLevel, jsonString);
}
}

View File

@ -1,109 +0,0 @@
package com.thefinestartist.utils.log;
import androidx.annotation.StringRes;
import com.thefinestartist.enums.LogLevel;
import com.thefinestartist.utils.content.ResourcesUtil;
/**
* Settings for {@link LogHelper}.
*
* @author Leonardo Taehwan Kim
*/
public class Settings {
private String tag = Settings.class.getSimpleName();
private boolean showThreadInfo = false;
private int stackTraceCount = 0;
private LogLevel logLevel = LogLevel.FULL;
private boolean showDivider = false;
private LogPrinter logPrinter = new AndroidLogPrinter();
public Settings() {
}
public Settings(String tag) {
this.tag = tag;
}
public Settings(@StringRes int tagRes) {
this.tag = ResourcesUtil.getString(tagRes);
}
public Settings(Class clazz) {
this.tag = clazz.getSimpleName();
}
public String getTag() {
return tag;
}
public Settings setTag(String tag) {
this.tag = tag;
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public Settings setTag(@StringRes int tagRes) {
this.tag = ResourcesUtil.getString(tagRes);
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public Settings setTag(Class clazz) {
this.tag = clazz.getSimpleName();
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public boolean getShowThreadInfo() {
return showThreadInfo;
}
public Settings setShowThreadInfo(boolean showThreadInfo) {
this.showThreadInfo = showThreadInfo;
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public int getStackTraceCount() {
return stackTraceCount;
}
public Settings setStackTraceCount(int stackTraceCount) {
this.stackTraceCount = stackTraceCount;
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public LogLevel getLogLevel() {
return logLevel;
}
public Settings setLogLevel(LogLevel logLevel) {
this.logLevel = logLevel;
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public boolean getShowDivider() {
return showDivider;
}
public Settings setShowDivider(boolean showDivider) {
this.showDivider = showDivider;
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
public LogPrinter getLogPrinter() {
return logPrinter;
}
public Settings setLogPrinter(LogPrinter logPrinter) {
this.logPrinter = logPrinter;
if (this == LogUtil.getDefaultSettings()) LogUtil.getInstance().setToDefault();
return this;
}
}

View File

@ -1,271 +0,0 @@
package com.thefinestartist.utils.preferences;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.util.Base64;
import com.thefinestartist.Base;
import com.thefinestartist.utils.etc.APILevel;
import com.thefinestartist.utils.log.LogHelper;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Set;
/**
* PreferencesUtil helps to manage application-wide {@link SharedPreferences} conveniently.
*
* @author Robin Gustafsson
*/
public class PreferencesUtil {
private static final LogHelper LogHelper = new LogHelper(PreferencesUtil.class);
private static String defaultName = PreferencesUtil.class.getCanonicalName();
private static SharedPreferences getPreferences(String name) {
return Base.getContext().getSharedPreferences(name, Context.MODE_PRIVATE);
}
public static String getDefaultName() {
return defaultName;
}
public static void setDefaultName(String name) {
defaultName = name;
}
public static boolean get(String key, boolean defValue) {
return get(defaultName, key, defValue);
}
public static int get(String key, int defValue) {
return get(defaultName, key, defValue);
}
public static float get(String key, float defValue) {
return get(defaultName, key, defValue);
}
public static long get(String key, long defValue) {
return get(defaultName, key, defValue);
}
public static String get(String key, String defValue) {
return get(defaultName, key, defValue);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static Set<String> get(String key, Set<String> defValue) {
return get(defaultName, key, defValue);
}
@TargetApi(Build.VERSION_CODES.FROYO)
public static <C extends Serializable> C get(String key, C defValue) {
return get(defaultName, key, defValue);
}
public static boolean get(String name, String key, boolean defValue) {
return getPreferences(name).getBoolean(key, defValue);
}
public static int get(String name, String key, int defValue) {
return getPreferences(name).getInt(key, defValue);
}
public static float get(String name, String key, float defValue) {
return getPreferences(name).getFloat(key, defValue);
}
public static long get(String name, String key, long defValue) {
return getPreferences(name).getLong(key, defValue);
}
public static String get(String name, String key, String defValue) {
return getPreferences(name).getString(key, defValue);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static Set<String> get(String name, String key, Set<String> defValue) {
return getPreferences(name).getStringSet(key, defValue);
}
@TargetApi(Build.VERSION_CODES.FROYO)
public static <C extends Serializable> C get(String name, String key, C defValue) {
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
C result = defValue;
String value = getPreferences(name).getString(key, null);
if (value != null) {
try {
byte[] decoded = Base64.decode(value.getBytes(), Base64.DEFAULT);
bais = new ByteArrayInputStream(decoded);
ois = new ObjectInputStream(bais);
result = (C) ois.readObject();
} catch (Exception e) {
LogHelper.e(e);
} finally {
if (ois != null) {
try {
ois.close();
} catch (IOException e) {
LogHelper.e(e);
}
}
if (bais != null) {
try {
bais.close();
} catch (IOException e) {
LogHelper.e(e);
}
}
}
}
return result;
}
public static void put(String key, boolean value) {
put(defaultName, key, value);
}
public static void put(String key, int value) {
put(defaultName, key, value);
}
public static void put(String key, float value) {
put(defaultName, key, value);
}
public static void put(String key, long value) {
put(defaultName, key, value);
}
public static void put(String key, String value) {
put(defaultName, key, value);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static void put(String key, Set<String> value) {
put(defaultName, key, value);
}
@TargetApi(Build.VERSION_CODES.FROYO)
public static <C extends Serializable> void put(String key, C value) {
put(defaultName, key, value);
}
public static void put(String name, String key, boolean value) {
if (APILevel.require(9))
getPreferences(name).edit().putBoolean(key, value).apply();
else
getPreferences(name).edit().putBoolean(key, value).commit();
}
public static void put(String name, String key, int value) {
if (APILevel.require(9))
getPreferences(name).edit().putInt(key, value).apply();
else
getPreferences(name).edit().putInt(key, value).commit();
}
public static void put(String name, String key, float value) {
if (APILevel.require(9))
getPreferences(name).edit().putFloat(key, value).apply();
else
getPreferences(name).edit().putFloat(key, value).commit();
}
public static void put(String name, String key, long value) {
if (APILevel.require(9))
getPreferences(name).edit().putLong(key, value).apply();
else
getPreferences(name).edit().putLong(key, value).commit();
}
public static void put(String name, String key, String value) {
if (APILevel.require(9))
getPreferences(name).edit().putString(key, value).apply();
else
getPreferences(name).edit().putString(key, value).commit();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static void put(String name, String key, Set<String> value) {
if (APILevel.require(9))
getPreferences(name).edit().putStringSet(key, value).apply();
else
getPreferences(name).edit().putStringSet(key, value).commit();
}
@TargetApi(Build.VERSION_CODES.FROYO)
public static <C extends Serializable> void put(String name, String key, C value) {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(value);
byte[] encoded = Base64.encode(baos.toByteArray(), Base64.DEFAULT);
if (APILevel.require(9))
getPreferences(name).edit().putString(key, new String(encoded)).apply();
else
getPreferences(name).edit().putString(key, new String(encoded)).commit();
} catch (IOException e) {
LogHelper.e(e);
throw new RuntimeException(e);
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
LogHelper.e(e);
}
}
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
LogHelper.e(e);
}
}
}
}
public static void remove(String key) {
remove(defaultName, key);
}
public static void remove(String name, String key) {
if (APILevel.require(9))
getPreferences(name).edit().remove(key).apply();
else
getPreferences(name).edit().remove(key).commit();
}
public static void clear() {
clear(defaultName);
}
public static void clear(String name) {
if (APILevel.require(9))
getPreferences(name).edit().clear().apply();
else
getPreferences(name).edit().clear().commit();
}
}

View File

@ -1,57 +0,0 @@
package com.thefinestartist.utils.service;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import com.thefinestartist.utils.etc.APILevel;
/**
* ClipboardManagerUtil helps to manage {@link ClipboardManager} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class ClipboardManagerUtil {
public static void setText(CharSequence text) {
android.text.ClipboardManager clipboardManager = ServiceUtil.getClipboardManager();
if (APILevel.require(11)) {
ClipboardManager cm = (ClipboardManager) clipboardManager;
ClipData clip = ClipData.newPlainText("ClipboardManagerUtil", text);
cm.setPrimaryClip(clip);
} else {
clipboardManager.setText(text);
}
}
public static boolean hasText() {
android.text.ClipboardManager clipboardManager = ServiceUtil.getClipboardManager();
if (APILevel.require(11)) {
ClipboardManager cm = (ClipboardManager) clipboardManager;
ClipDescription description = cm.getPrimaryClipDescription();
ClipData clipData = cm.getPrimaryClip();
return clipData != null
&& description != null
&& (description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN));
} else {
return clipboardManager.hasText();
}
}
public static CharSequence getText() {
android.text.ClipboardManager clipboardManager = ServiceUtil.getClipboardManager();
if (APILevel.require(11)) {
ClipboardManager cm = (ClipboardManager) clipboardManager;
ClipDescription description = cm.getPrimaryClipDescription();
ClipData clipData = cm.getPrimaryClip();
if (clipData != null
&& description != null
&& description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
return clipData.getItemAt(0).getText();
else
return null;
} else {
return clipboardManager.getText();
}
}
}

View File

@ -1,330 +0,0 @@
package com.thefinestartist.utils.service;
import android.accounts.AccountManager;
import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.AppOpsManager;
import android.app.DownloadManager;
import android.app.KeyguardManager;
import android.app.NotificationManager;
import android.app.SearchManager;
import android.app.UiModeManager;
import android.app.WallpaperManager;
import android.app.admin.DevicePolicyManager;
import android.app.job.JobScheduler;
import android.app.usage.NetworkStatsManager;
import android.app.usage.UsageStatsManager;
import android.appwidget.AppWidgetManager;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.RestrictionsManager;
import android.content.pm.LauncherApps;
import android.hardware.ConsumerIrManager;
import android.hardware.SensorManager;
import android.hardware.camera2.CameraManager;
import android.hardware.display.DisplayManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.input.InputManager;
import android.hardware.usb.UsbManager;
import android.location.LocationManager;
import android.media.AudioManager;
import android.media.MediaRouter;
import android.media.midi.MidiManager;
import android.media.projection.MediaProjectionManager;
import android.media.session.MediaSessionManager;
import android.media.tv.TvInputManager;
import android.net.ConnectivityManager;
import android.net.nsd.NsdManager;
import android.net.wifi.WifiManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.nfc.NfcManager;
import android.os.BatteryManager;
import android.os.DropBoxManager;
import android.os.PowerManager;
import android.os.UserManager;
import android.os.Vibrator;
import android.os.storage.StorageManager;
import android.print.PrintManager;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.ClipboardManager;
import android.view.LayoutInflater;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.CaptioningManager;
import android.view.inputmethod.InputMethodManager;
import android.view.textservice.TextServicesManager;
import androidx.annotation.NonNull;
import com.thefinestartist.Base;
/**
* ServiceUtil helps to manage Android system service conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class ServiceUtil {
public static Object getSystemService(@NonNull String serviceName) {
return Base.getContext().getSystemService(serviceName);
}
public static AccessibilityManager getAccessibilityManager() {
return (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
}
@TargetApi(19)
public static CaptioningManager getCaptioningManager() {
return (CaptioningManager) getSystemService(Context.CAPTIONING_SERVICE);
}
public static AccountManager getAccountManager() {
return (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);
}
public static ActivityManager getActivityManager() {
return (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
}
public static AlarmManager getAlarmManager() {
return (AlarmManager) getSystemService(Context.ALARM_SERVICE);
}
public static AudioManager getAudioManager() {
return (AudioManager) getSystemService(Context.AUDIO_SERVICE);
}
@TargetApi(16)
public static MediaRouter getMediaRouter() {
return (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
}
@TargetApi(18)
public static BluetoothManager getBluetoothManager() {
return (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
}
public static ClipboardManager getClipboardManager() {
return (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
}
public static ConnectivityManager getConnectivityManager() {
return (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
}
@TargetApi(8)
public static DevicePolicyManager getDevicePolicyManager() {
return (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
}
@TargetApi(9)
public static DownloadManager getDownloadManager() {
return (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
}
@TargetApi(21)
public static BatteryManager getBatteryManager() {
return (BatteryManager) getSystemService(Context.BATTERY_SERVICE);
}
@TargetApi(10)
public static NfcManager getNfcManager() {
return (NfcManager) getSystemService(Context.NFC_SERVICE);
}
@TargetApi(8)
public static DropBoxManager getDropBoxManager() {
return (DropBoxManager) getSystemService(Context.DROPBOX_SERVICE);
}
@TargetApi(16)
public static InputManager getInputManager() {
return (InputManager) getSystemService(Context.INPUT_SERVICE);
}
@TargetApi(17)
public static DisplayManager getDisplayManager() {
return (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
}
public static InputMethodManager getInputMethodManager() {
return (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
}
@TargetApi(14)
public static TextServicesManager getTextServicesManager() {
return (TextServicesManager) getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
}
public static KeyguardManager getKeyguardManager() {
return (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
}
public static LayoutInflater getLayoutInflater() {
return (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public static LocationManager getLocationManager() {
return (LocationManager) getSystemService(Context.LOCATION_SERVICE);
}
public static NotificationManager getNotificationManager() {
return (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
@TargetApi(16)
public static NsdManager getNsdManager() {
return (NsdManager) getSystemService(Context.NSD_SERVICE);
}
public static PowerManager getPowerManager() {
return (PowerManager) getSystemService(Context.POWER_SERVICE);
}
public static SearchManager getSearchManager() {
return (SearchManager) getSystemService(Context.SEARCH_SERVICE);
}
public static SensorManager getSensorManager() {
return (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
@TargetApi(9)
public static StorageManager getStorageManager() {
return (StorageManager) getSystemService(Context.STORAGE_SERVICE);
}
public static TelephonyManager getTelephonyManager() {
return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
}
@TargetApi(22)
public static SubscriptionManager getSubscriptionManager() {
return (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
}
@TargetApi(23)
public static CarrierConfigManager getCarrierConfigManager() {
return (CarrierConfigManager) getSystemService(Context.CARRIER_CONFIG_SERVICE);
}
@TargetApi(21)
public static TelecomManager getTelecomManager() {
return (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
}
@TargetApi(8)
public static UiModeManager getUiModeManager() {
return (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);
}
@TargetApi(12)
public static UsbManager getUsbManager() {
return (UsbManager) getSystemService(Context.USB_SERVICE);
}
public static Vibrator getVibrator() {
return (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
}
public static WallpaperManager getWallpaperManager() {
return WallpaperManager.getInstance(Base.getContext());
}
public static WifiManager getWifiManager() {
return (WifiManager) getSystemService(Context.WIFI_SERVICE);
}
@TargetApi(14)
public static WifiP2pManager getWifiP2pManager() {
return (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
}
public static WindowManager getWindowManager() {
return (WindowManager) getSystemService(Context.WINDOW_SERVICE);
}
@TargetApi(17)
public static UserManager getUserManager() {
return (UserManager) getSystemService(Context.USER_SERVICE);
}
@TargetApi(19)
public static AppOpsManager getAppOpsManager() {
return (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
}
@TargetApi(21)
public static CameraManager getCameraManager() {
return (CameraManager) getSystemService(Context.CAMERA_SERVICE);
}
@TargetApi(21)
public static LauncherApps getLauncherApps() {
return (LauncherApps) getSystemService(Context.LAUNCHER_APPS_SERVICE);
}
@TargetApi(21)
public static RestrictionsManager getRestrictionsManager() {
return (RestrictionsManager) getSystemService(Context.RESTRICTIONS_SERVICE);
}
@TargetApi(19)
public static PrintManager getPrintManager() {
return (PrintManager) getSystemService(Context.PRINT_SERVICE);
}
@TargetApi(19)
public static ConsumerIrManager getConsumerIrManager() {
return (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);
}
@TargetApi(21)
public static MediaSessionManager getMediaSessionManager() {
return (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
}
@TargetApi(23)
public static FingerprintManager getFingerprintManager() {
return (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
}
@TargetApi(21)
public static TvInputManager getTvInputManager() {
return (TvInputManager) getSystemService(Context.TV_INPUT_SERVICE);
}
@TargetApi(22)
public static UsageStatsManager getUsageStatsManager() {
return (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
}
@TargetApi(23)
public static NetworkStatsManager getNetworkStatsManager() {
return (NetworkStatsManager) getSystemService(Context.NETWORK_STATS_SERVICE);
}
@TargetApi(21)
public static JobScheduler getJobScheduler() {
return (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
}
@TargetApi(21)
public static MediaProjectionManager getMediaProjectionManager() {
return (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
}
@TargetApi(21)
public static AppWidgetManager getAppWidgetManager() {
return (AppWidgetManager) getSystemService(Context.APPWIDGET_SERVICE);
}
@TargetApi(23)
public static MidiManager getMidiManager() {
return (MidiManager) getSystemService(Context.MIDI_SERVICE);
}
}

View File

@ -1,48 +0,0 @@
package com.thefinestartist.utils.service;
import android.annotation.TargetApi;
import android.media.AudioAttributes;
import android.os.Vibrator;
/**
* VibratorUtil helps to manage {@link Vibrator} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class VibratorUtil {
@TargetApi(11)
public static boolean hasVibrator() {
return ServiceUtil.getVibrator().hasVibrator();
}
public static void vibrate() {
vibrate(200);
}
public static void vibrate(long milliseconds) {
vibrate(new long[]{milliseconds});
}
public static void vibrate(long[] pattern) {
vibrate(pattern, -1);
}
public static void vibrate(long[] pattern, int repeat) {
ServiceUtil.getVibrator().vibrate(pattern, repeat);
}
@TargetApi(21)
public static void vibrate(long milliseconds, AudioAttributes attributes) {
vibrate(new long[]{milliseconds}, -1, attributes);
}
@TargetApi(21)
public static void vibrate(long[] pattern, int repeat, AudioAttributes attributes) {
ServiceUtil.getVibrator().vibrate(pattern, repeat, attributes);
}
public static void cancel() {
ServiceUtil.getVibrator().cancel();
}
}

View File

@ -1,21 +0,0 @@
package com.thefinestartist.utils.service;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
/**
* WindowManagerUtil helps to manage {@link WindowManager} conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class WindowManagerUtil {
public static Display getDefaultDisplay() {
return ServiceUtil.getWindowManager().getDefaultDisplay();
}
public static void removeViewImmediate(View view) {
ServiceUtil.getWindowManager().removeViewImmediate(view);
}
}

View File

@ -1,82 +0,0 @@
package com.thefinestartist.utils.ui;
import android.graphics.Point;
import android.util.TypedValue;
import android.view.Display;
import com.thefinestartist.enums.Rotation;
import com.thefinestartist.utils.content.ResourcesUtil;
import com.thefinestartist.utils.content.ThemeUtil;
import com.thefinestartist.utils.content.TypedValueUtil;
import com.thefinestartist.utils.etc.APILevel;
import com.thefinestartist.utils.service.WindowManagerUtil;
/**
* DisplayUtil helps to calculate screen size conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class DisplayUtil {
public static int getWidth() {
Display display = WindowManagerUtil.getDefaultDisplay();
if (APILevel.require(13)) {
Point size = new Point();
display.getSize(size);
return size.x;
} else {
return display.getWidth();
}
}
public static int getHeight() {
Display display = WindowManagerUtil.getDefaultDisplay();
if (APILevel.require(13)) {
Point size = new Point();
display.getSize(size);
return size.y;
} else {
return display.getHeight();
}
}
public static Rotation getRotation() {
if (APILevel.require(8))
return Rotation.fromValue(WindowManagerUtil.getDefaultDisplay().getRotation());
else
return Rotation.fromValue(WindowManagerUtil.getDefaultDisplay().getOrientation());
}
public static boolean isPortrait() {
return getHeight() >= getWidth();
}
public static boolean isLandscape() {
return getHeight() < getWidth();
}
public static int getStatusBarHeight() {
int resourceId = ResourcesUtil.getIdentifier("status_bar_height", "dimen", "android");
return resourceId > 0 ?
ResourcesUtil.getDimensionPixelSize(resourceId) :
0;
}
public static int getToolbarHeight() {
return getActionBarHeight();
}
public static int getActionBarHeight() {
TypedValue tv = new TypedValue();
return ThemeUtil.resolveAttribute(android.R.attr.actionBarSize, tv, true) ?
TypedValueUtil.complexToDimensionPixelSize(tv.data) :
0;
}
public static int getNavigationBarHeight() {
int resourceId = ResourcesUtil.getIdentifier("navigation_bar_height", "dimen", "android");
return resourceId > 0 ?
ResourcesUtil.getDimensionPixelSize(resourceId) :
0;
}
}

View File

@ -1,184 +0,0 @@
package com.thefinestartist.utils.ui;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import androidx.fragment.app.Fragment;
import com.thefinestartist.Base;
import com.thefinestartist.converters.UnitConverter;
import com.thefinestartist.utils.etc.ThreadUtil;
import com.thefinestartist.utils.service.ServiceUtil;
/**
* KeyboardUtil helps to show and hide keyboard conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class KeyboardUtil {
public static int height = 0;
public static final String KEYBOARD_UTIL_PREF = "KEYBOARD_UTIL_PREF";
public static final String KEYBOARD_HEIGHT = "KEYBOARD_HEIGHT";
public static final int DEFAULT_KEYBOARD_HEIGHT = 200;
/**
* Helps to show keyboard in {@link Activity#onCreate(Bundle)}, {@link Activity#onStart()},
* {@link Activity#onResume()},
* {@link MenuItem.OnActionExpandListener#onMenuItemActionExpand(MenuItem)},
* {@link Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle)} and etc
* This method guarantee to show keyboard every time.
*/
public static void show(final View view) {
if (view == null)
return;
view.postDelayed(new Runnable() {
@Override
public void run() {
showInMainThread(view);
}
}, 200);
}
/**
* Please note that this method does not guarantee to show keyboard every time. To guarantee
* to show keyboard, please use {@link #show(View)} instead. It doesn't have any delay, use
* this method when it is able to show keyboard immediately. EX) when user click a button to
* show keyboard
*/
public static void showImmediately(final View view) {
if (view == null)
return;
if (ThreadUtil.isMain()) {
showInMainThread(view);
} else {
view.post(new Runnable() {
@Override
public void run() {
showInMainThread(view);
}
});
}
}
private static void showInMainThread(final View view) {
if (view == null)
return;
view.requestFocus();
ServiceUtil.getInputMethodManager().showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
public static void hide(Fragment fragment) {
if (fragment == null || fragment.getActivity() == null)
return;
hide(fragment.getActivity());
}
public static void hide(Fragment fragment, boolean clearFocus) {
if (fragment == null || fragment.getActivity() == null)
return;
hide(fragment.getActivity());
}
public static void hide(Activity activity) {
hide(activity, true);
}
public static void hide(Activity activity, boolean clearFocus) {
if (activity == null)
return;
hide(activity.getCurrentFocus(), clearFocus);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static void hide(android.app.Fragment fragment) {
hide(fragment, true);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static void hide(android.app.Fragment fragment, boolean clearFocus) {
if (fragment == null || fragment.getActivity() == null)
return;
hide(fragment.getActivity(), clearFocus);
}
public static void hide(Dialog dialog) {
hide(dialog, true);
}
public static void hide(Dialog dialog, boolean clearFocus) {
if (dialog == null)
return;
hide(dialog.getCurrentFocus(), clearFocus);
}
public static void hide(View view) {
hide(view, true);
}
public static void hide(View view, boolean clearFocus) {
if (view == null)
return;
if (clearFocus) {
view.clearFocus();
}
ServiceUtil.getInputMethodManager().hideSoftInputFromWindow(view.getWindowToken(), 0);
}
public static int getHeight() {
if (height <= 0)
height = Base.getContext().getSharedPreferences(KEYBOARD_UTIL_PREF, Context.MODE_PRIVATE).getInt(KEYBOARD_HEIGHT, UnitConverter.dpToPx(DEFAULT_KEYBOARD_HEIGHT));
return height;
}
public static void setHeight(int height) {
KeyboardUtil.height = height;
Base.getContext().getSharedPreferences(KEYBOARD_UTIL_PREF, Context.MODE_PRIVATE).edit().putInt(KEYBOARD_HEIGHT, height).apply();
}
// coordinatorLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
// @Override
// public void onGlobalLayout() {
// Rect r = new Rect();
// coordinatorLayout.getWindowVisibleDisplayFrame(r);
// if (ResourcesUtil.navigationBarHeight == -1) {
// ResourcesUtil.navigationBarHeight = coordinatorLayout.getRootView().getHeight() - r.height() - ResourcesUtil.statusBarHeight;
// }
// int usableHeight = coordinatorLayout.getRootView().getHeight() - ResourcesUtil.statusBarHeight - ResourcesUtil.navigationBarHeight;
// int keyboardHeight = usableHeight - r.height();
// if (isKeyboardOpened) {
// if (keyboardHeight < 100) {
// onKeyboardChanged(usableHeight, keyboardHeight, false);
// isKeyboardOpened = false;
// }
// } else {
// if (keyboardHeight > 100) {
// onKeyboardChanged(usableHeight, keyboardHeight, true);
// isKeyboardOpened = true;
// }
// }
// }
// });
}
//TODO: Support keyboard show and hide listener
//TODO: Keyboard height

View File

@ -1,39 +0,0 @@
package com.thefinestartist.utils.ui;
import android.graphics.drawable.Drawable;
import android.view.View;
import androidx.annotation.DrawableRes;
import com.thefinestartist.Base;
import com.thefinestartist.utils.etc.APILevel;
/**
* ViewUtil helps to set background drawable conveniently.
*
* @author Leonardo Taehwan Kim
*/
public class ViewUtil {
public static void setBackground(View view, Drawable drawable) {
if (view == null)
return;
if (APILevel.require(16)) {
view.setBackground(drawable);
} else {
view.setBackgroundDrawable(drawable);
}
}
public static void setBackground(View view, @DrawableRes int drawableRes) {
if (view == null)
return;
if (APILevel.require(16)) {
view.setBackground(Base.getResources().getDrawable(drawableRes));
} else {
view.setBackgroundDrawable(Base.getResources().getDrawable(drawableRes));
}
}
}

View File

@ -0,0 +1,57 @@
//package kr.lunaticbum;
//
//import android.content.Context;
//import android.content.res.AssetManager;
//import android.content.res.Configuration;
//import android.content.res.Resources;
//import android.util.DisplayMetrics;
//
//import androidx.annotation.NonNull;
//
///**
// * Base helps to get {@link Context}, {@link Resources}, {@link AssetManager}, {@link Configuration} and {@link DisplayMetrics} in any class.
// *
// * @author Leonardo Taehwan Kim
// */
//public class Base {
//
// private static Context context;
//
// public static void initialize(@NonNull Context context) {
// Base.context = context;
// }
//
// public static Context getContext() {
// synchronized (Base.class) {
// if (Base.context == null)
// throw new NullPointerException("Call Base.initialize(context) within your Application onCreate() method.");
//
// return Base.context.getApplicationContext();
// }
// }
//
// public static Resources getResources() {
// return Base.getContext().getResources();
// }
//
// public static Resources.Theme getTheme() {
// return Base.getContext().getTheme();
// }
//
// public static AssetManager getAssets() {
// return Base.getContext().getAssets();
// }
//
// public static Configuration getConfiguration() {
// return Base.getResources().getConfiguration();
// }
//
// public static DisplayMetrics getDisplayMetrics() {
// return Base.getResources().getDisplayMetrics();
// }
//}
//// TODO: Thread safety
//// TODO: ripple, bitmap, time, contact list, picture list, video list, connectivity, wake lock, screen lock/off/on, get attributes, cookie, audio
//// TODO: keystore
//// TODO: http://jo.centis1504.net/?p=1189
//// TODO: Test codes

View File

@ -0,0 +1,49 @@
package kr.lunaticbum
import android.annotation.SuppressLint
import android.content.Context
import android.content.res.AssetManager
import android.content.res.Configuration
import android.content.res.Resources
import android.content.res.Resources.Theme
import android.util.DisplayMetrics
/**
* Base helps to get [Context], [Resources], [AssetManager], [Configuration] and [DisplayMetrics] in any class.
*
* @author Leonardo Taehwan Kim
*/
@SuppressLint("StaticFieldLeak")
object Base {
private var context: Context? = null
fun initialize(context: Context) {
Base.context = context
}
fun getContext(): Context {
synchronized(Base::class.java) {
if (context == null) throw NullPointerException("Call Base.initialize(context) within your Application onCreate() method.")
return context!!.applicationContext
}
}
val resources: Resources
get() = getContext().resources
val theme: Theme
get() = getContext().theme
val assets: AssetManager
get() = getContext().assets
val configuration: Configuration
get() = resources.configuration
val displayMetrics: DisplayMetrics
get() = resources.displayMetrics
} // TODO: Thread safety
// TODO: ripple, bitmap, time, contact list, picture list, video list, connectivity, wake lock, screen lock/off/on, get attributes, cookie, audio
// TODO: keystore
// TODO: http://jo.centis1504.net/?p=1189
// TODO: Test codes

View File

@ -1,4 +1,4 @@
package com.thefinestartist.annotations;
package kr.lunaticbum.annotations;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.CLASS;

View File

@ -1,4 +1,4 @@
package com.thefinestartist.binders;
package kr.lunaticbum.binders;
import android.app.Activity;
import android.content.Intent;

View File

@ -0,0 +1,82 @@
//package kr.lunaticbum.builders;
//
//import android.annotation.TargetApi;
//import android.app.Activity;
//import android.content.Intent;
//import android.os.Bundle;
//import android.os.Parcelable;
//
//import androidx.annotation.NonNull;
//import androidx.annotation.Nullable;
//
//import kr.lunaticbum.Base;
//import kr.lunaticbum.utils.content.ContextUtil;
//
//import java.io.Serializable;
//import java.util.ArrayList;
//
///**
// * ActivityBuilder helps to build {@link Activity} {@link Intent} and start {@link Activity}.
// *
// * @author Leonardo Taehwan Kim
// */
//public class ActivityBuilder {
//
// final Intent intent;
//
// public <C extends Activity> ActivityBuilder(@NonNull Class<C> clazz) {
// intent = new Intent(Base.getContext(), clazz);
// }
//
// public <T extends Serializable> ActivityBuilder set(@NonNull String key, T value) {
// intent.putExtra(key, value);
// return this;
// }
//
// public ActivityBuilder set(@NonNull String key, Parcelable value) {
// intent.putExtra(key, value);
// return this;
// }
//
// public ActivityBuilder set(@NonNull String key, Parcelable[] value) {
// intent.putExtra(key, value);
// return this;
// }
//
// public <T extends Parcelable> ActivityBuilder set(@NonNull String key, ArrayList<T> value) {
// intent.putExtra(key, value);
// return this;
// }
//
// public ActivityBuilder remove(@NonNull String key) {
// intent.removeExtra(key);
// return this;
// }
//
// public ActivityBuilder setFlags(int flags) {
// intent.setFlags(flags);
// return this;
// }
//
// public ActivityBuilder addFlags(int flags) {
// intent.addFlags(flags);
// return this;
// }
//
// public Intent buildIntent() {
// return intent;
// }
//
// public void start() {
// ContextUtil.startActivity(intent);
// }
//
// public void startForResult(@NonNull Activity activity, int requestCode) {
// activity.startActivityForResult(intent, requestCode);
// }
//
// @TargetApi(16)
// public void startForResult(@NonNull Activity activity, int requestCode, @Nullable Bundle options) {
// activity.startActivityForResult(intent, requestCode, options);
// }
//}

View File

@ -0,0 +1,72 @@
package kr.lunaticbum.builders
import android.annotation.TargetApi
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import kr.lunaticbum.Base.getContext
import kr.lunaticbum.utils.content.ContextUtil
import java.io.Serializable
/**
* ActivityBuilder helps to build [Activity] [Intent] and start [Activity].
*
* @author Leonardo Taehwan Kim
*/
class ActivityBuilder(clazz: Class<Activity?>) {
val intent: Intent =
Intent(getContext(), clazz)
fun <T : Serializable?> set(key: String, value: T): ActivityBuilder {
intent.putExtra(key, value)
return this
}
fun set(key: String, value: Parcelable?): ActivityBuilder {
intent.putExtra(key, value)
return this
}
fun set(key: String, value: Array<Parcelable?>?): ActivityBuilder {
intent.putExtra(key, value)
return this
}
fun <T : Parcelable?> set(key: String, value: ArrayList<T>?): ActivityBuilder {
intent.putExtra(key, value)
return this
}
fun remove(key: String): ActivityBuilder {
intent.removeExtra(key)
return this
}
fun setFlags(flags: Int): ActivityBuilder {
intent.setFlags(flags)
return this
}
fun addFlags(flags: Int): ActivityBuilder {
intent.addFlags(flags)
return this
}
fun buildIntent(): Intent {
return intent
}
fun start() {
ContextUtil.startActivity(intent)
}
fun startForResult(activity: Activity, requestCode: Int) {
activity.startActivityForResult(intent, requestCode)
}
@TargetApi(16)
fun startForResult(activity: Activity, requestCode: Int, options: Bundle?) {
activity.startActivityForResult(intent, requestCode, options)
}
}

View File

@ -1,4 +1,4 @@
package com.thefinestartist.builders;
package kr.lunaticbum.builders;
import android.os.Bundle;
import android.os.Parcelable;

View File

@ -1,4 +1,4 @@
package com.thefinestartist.converters;
package kr.lunaticbum.converters;
/**
* Unit is abbreviation class of {@link UnitConverter}.

View File

@ -0,0 +1,43 @@
//package kr.lunaticbum.converters;
//
//import kr.lunaticbum.Base;
//
///**
// * UnitConverter helps to convert dp or sp size into pixel.
// *
// * @author Leonardo Taehwan Kim
// */
//public class UnitConverter {
//
// public static float dpToPx(float dp) {
// return dp * Base.getDisplayMetrics().density;
// }
//
// public static int dpToPx(int dp) {
// return (int) (dp * Base.getDisplayMetrics().density + 0.5f);
// }
//
// public static float pxToDp(float px) {
// return px / Base.getDisplayMetrics().density;
// }
//
// public static int pxToDp(int px) {
// return (int) (px / Base.getDisplayMetrics().density + 0.5f);
// }
//
// public static float spToPx(float sp) {
// return sp * Base.getDisplayMetrics().scaledDensity;
// }
//
// public static int spToPx(int sp) {
// return (int) (sp * Base.getDisplayMetrics().scaledDensity + 0.5f);
// }
//
// public static float pxToSp(float px) {
// return px / Base.getDisplayMetrics().scaledDensity;
// }
//
// public static int pxToSp(int px) {
// return (int) (px / Base.getDisplayMetrics().scaledDensity + 0.5f);
// }
//}

View File

@ -0,0 +1,44 @@
package kr.lunaticbum.converters
import kr.lunaticbum.Base.displayMetrics
/**
* UnitConverter helps to convert dp or sp size into pixel.
*
* @author Leonardo Taehwan Kim
*/
open class UnitConverter {
companion object {
fun dpToPx(dp: Float): Float {
return dp * displayMetrics.density
}
fun dpToPx(dp: Int): Int {
return (dp * displayMetrics.density + 0.5f).toInt()
}
fun pxToDp(px: Float): Float {
return px / displayMetrics.density
}
fun pxToDp(px: Int): Int {
return (px / displayMetrics.density + 0.5f).toInt()
}
fun spToPx(sp: Float): Float {
return sp * displayMetrics.scaledDensity
}
fun spToPx(sp: Int): Int {
return (sp * displayMetrics.scaledDensity + 0.5f).toInt()
}
fun pxToSp(px: Float): Float {
return px / displayMetrics.scaledDensity
}
fun pxToSp(px: Int): Int {
return (px / displayMetrics.scaledDensity + 0.5f).toInt()
}
}
}

View File

@ -1,6 +1,6 @@
package com.thefinestartist.enums;
package kr.lunaticbum.enums;
import com.thefinestartist.utils.log.LogUtil;
import kr.lunaticbum.utils.log.LogUtil;
/**
* Enum class associated with {@link LogUtil}.

View File

@ -1,6 +1,6 @@
package com.thefinestartist.enums;
package kr.lunaticbum.enums;
import com.thefinestartist.utils.ui.DisplayUtil;
import kr.lunaticbum.utils.ui.DisplayUtil;
/**
* Enum class associated with {@link DisplayUtil}.

View File

@ -1,6 +1,6 @@
package com.thefinestartist.listeners;
package kr.lunaticbum.listeners;
import com.thefinestartist.utils.ui.KeyboardUtil;
import kr.lunaticbum.utils.ui.KeyboardUtil;
/**
* Listener class associated with {@link KeyboardUtil}.

View File

@ -0,0 +1,502 @@
//package kr.lunaticbum.utils.content;
//
//import android.annotation.SuppressLint;
//import android.annotation.TargetApi;
//import android.app.WallpaperManager;
//import android.content.BroadcastReceiver;
//import android.content.ComponentCallbacks;
//import android.content.ComponentName;
//import android.content.ContentResolver;
//import android.content.Context;
//import android.content.Intent;
//import android.content.IntentFilter;
//import android.content.IntentSender;
//import android.content.ServiceConnection;
//import android.content.SharedPreferences;
//import android.content.pm.ApplicationInfo;
//import android.content.pm.PackageManager;
//import android.content.res.AssetManager;
//import android.content.res.ColorStateList;
//import android.content.res.Resources;
//import android.content.res.TypedArray;
//import android.database.DatabaseErrorHandler;
//import android.database.sqlite.SQLiteDatabase;
//import android.graphics.Bitmap;
//import android.graphics.drawable.Drawable;
//import android.net.Uri;
//import android.os.Bundle;
//import android.os.Handler;
//import android.os.Looper;
//import android.os.UserHandle;
//import android.util.AttributeSet;
//
//import androidx.annotation.AttrRes;
//import androidx.annotation.ColorInt;
//import androidx.annotation.ColorRes;
//import androidx.annotation.DrawableRes;
//import androidx.annotation.NonNull;
//import androidx.annotation.Nullable;
//import androidx.annotation.StringRes;
//import androidx.annotation.StyleRes;
//import androidx.annotation.StyleableRes;
//import androidx.core.content.ContextCompat;
//
//import kr.lunaticbum.Base;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//
///**
// * ContextUtil helps to manage {@link Context} conveniently.
// *
// * @author Leonardo Taehwan Kim
// */
//public class ContextUtil {
//
// public static boolean bindService(Intent service, ServiceConnection conn, int flags) {
// return Base.getContext().bindService(service, conn, flags);
// }
//
// public static int checkCallingOrSelfPermission(String permission) {
// return Base.getContext().checkCallingOrSelfPermission(permission);
// }
//
// public static int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
// return Base.getContext().checkCallingOrSelfUriPermission(uri, modeFlags);
// }
//
// public static int checkCallingPermission(String permission) {
// return Base.getContext().checkCallingPermission(permission);
// }
//
// public static int checkCallingUriPermission(Uri uri, int modeFlags) {
// return Base.getContext().checkCallingUriPermission(uri, modeFlags);
// }
//
// public static int checkPermission(String permission, int pid, int uid) {
// return Base.getContext().checkPermission(permission, pid, uid);
// }
//
// public static int checkSelfPermission(@NonNull String permission) {
// return ContextCompat.checkSelfPermission(Base.getContext(), permission);
// }
//
// public static int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
// return Base.getContext().checkUriPermission(uri, pid, uid, modeFlags);
// }
//
// public static int checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags) {
// return Base.getContext().checkUriPermission(uri, readPermission, writePermission, pid, uid, modeFlags);
// }
//
// public static Context createPackageContext(String packageName, int flags) throws PackageManager.NameNotFoundException {
// return Base.getContext().createPackageContext(packageName, flags);
// }
//
// public static String[] databaseList() {
// return Base.getContext().databaseList();
// }
//
// public static boolean deleteDatabase(String name) {
// return Base.getContext().deleteDatabase(name);
// }
//
// public static boolean deleteFile(String name) {
// return Base.getContext().deleteFile(name);
// }
//
// public static void enforceCallingOrSelfPermission(String permission, String message) {
// Base.getContext().enforceCallingOrSelfPermission(permission, message);
// }
//
// public static void enforceCallingOrSelfUriPermission(Uri uri, int modeFlags, String message) {
// Base.getContext().enforceCallingOrSelfUriPermission(uri, modeFlags, message);
// }
//
// public static void enforceCallingPermission(String permission, String message) {
// Base.getContext().enforceCallingPermission(permission, message);
// }
//
// public static void enforceCallingUriPermission(Uri uri, int modeFlags, String message) {
// Base.getContext().enforceCallingUriPermission(uri, modeFlags, message);
// }
//
// public static void enforcePermission(String permission, int pid, int uid, String message) {
// Base.getContext().enforcePermission(permission, pid, uid, message);
// }
//
// public static void enforceUriPermission(Uri uri, int pid, int uid, int modeFlags, String message) {
// Base.getContext().enforceUriPermission(uri, pid, uid, modeFlags, message);
// }
//
// public static void enforceUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags, String message) {
// Base.getContext().enforceUriPermission(uri, readPermission, writePermission, pid, uid, modeFlags, message);
// }
//
// public static String[] fileList() {
// return Base.getContext().fileList();
// }
//
// public static Context getApplicationContext() {
// return Base.getContext().getApplicationContext();
// }
//
// public static ApplicationInfo getApplicationInfo() {
// return Base.getContext().getApplicationInfo();
// }
//
// public static AssetManager getAssets() {
// return Base.getContext().getAssets();
// }
//
// public static File getCacheDir() {
// return Base.getContext().getCacheDir();
// }
//
// public static ClassLoader getClassLoader() {
// return Base.getContext().getClassLoader();
// }
//
// public static File getCodeCacheDir() {
// return ContextCompat.getCodeCacheDir(Base.getContext());
// }
//
// @ColorInt
// public static int getColor(@ColorRes int colorRes) {
// return ContextCompat.getColor(Base.getContext(), colorRes);
// }
//
// public static ColorStateList getColorStateList(@ColorRes int colorRes) {
// return ContextCompat.getColorStateList(Base.getContext(), colorRes);
// }
//
// public static ContentResolver getContentResolver() {
// return Base.getContext().getContentResolver();
// }
//
// public static File getDatabasePath(String name) {
// return Base.getContext().getDatabasePath(name);
// }
//
// public static File getDir(String name, int mode) {
// return Base.getContext().getDir(name, mode);
// }
//
// public static Drawable getDrawable(@DrawableRes int drawableRes) {
// return ContextCompat.getDrawable(Base.getContext(), drawableRes);
// }
//
// @Nullable
// @TargetApi(8)
// public static File getExternalCacheDir() {
// return Base.getContext().getExternalCacheDir();
// }
//
// public static File[] getExternalCacheDirs() {
// return ContextCompat.getExternalCacheDirs(Base.getContext());
// }
//
// @Nullable
// @TargetApi(8)
// public static File getExternalFilesDir(String type) {
// return Base.getContext().getExternalFilesDir(type);
// }
//
// public static File[] getExternalFilesDirs(String type) {
// return ContextCompat.getExternalFilesDirs(Base.getContext(), type);
// }
//
// @TargetApi(21)
// public static File[] getExternalMediaDirs() {
// return Base.getContext().getExternalMediaDirs();
// }
//
// public static File getFileStreamPath(String name) {
// return Base.getContext().getFileStreamPath(name);
// }
//
// public static File getFilesDir() {
// return Base.getContext().getFilesDir();
// }
//
// public static Looper getMainLooper() {
// return Base.getContext().getMainLooper();
// }
//
// public static File getNoBackupFilesDir() {
// return ContextCompat.getNoBackupFilesDir(Base.getContext());
// }
//
// @TargetApi(11)
// public static File getObbDir() {
// return Base.getContext().getObbDir();
// }
//
// public static File[] getObbDirs() {
// return ContextCompat.getObbDirs(Base.getContext());
// }
//
// @TargetApi(8)
// public static String getPackageCodePath() {
// return Base.getContext().getPackageCodePath();
// }
//
// public static PackageManager getPackageManager() {
// return Base.getContext().getPackageManager();
// }
//
// public static String getPackageName() {
// return Base.getContext().getPackageName();
// }
//
// @TargetApi(8)
// public static String getPackageResourcePath() {
// return Base.getContext().getPackageResourcePath();
// }
//
// public static Resources getResources() {
// return Base.getContext().getResources();
// }
//
// public static SharedPreferences getSharedPreferences(String name, int mode) {
// return Base.getContext().getSharedPreferences(name, mode);
// }
//
// public static String getString(@StringRes int stringRes) {
// return Base.getContext().getString(stringRes);
// }
//
// public static String getString(@StringRes int stringRes, Object... formatArgs) {
// return Base.getContext().getString(stringRes, formatArgs);
// }
//
// @TargetApi(23)
// public static <T> T getSystemService(Class<T> serviceClass) {
// return Base.getContext().getSystemService(serviceClass);
// }
//
// public static Object getSystemService(String name) {
// return Base.getContext().getSystemService(name);
// }
//
// @TargetApi(23)
// public static String getSystemServiceName(Class<?> serviceClass) {
// return Base.getContext().getSystemServiceName(serviceClass);
// }
//
// public static CharSequence getText(@StringRes int stringRes) {
// return Base.getContext().getText(stringRes);
// }
//
// public static Resources.Theme getTheme() {
// return Base.getContext().getTheme();
// }
//
// public static Drawable getWallpaper() {
// return WallpaperManager.getInstance(Base.getContext()).getDrawable();
// }
//
// public static int getWallpaperDesiredMinimumHeight() {
// return WallpaperManager.getInstance(Base.getContext()).getDesiredMinimumHeight();
// }
//
// public static int getWallpaperDesiredMinimumWidth() {
// return WallpaperManager.getInstance(Base.getContext()).getDesiredMinimumWidth();
// }
//
// public static void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
// Base.getContext().grantUriPermission(toPackage, uri, modeFlags);
// }
//
// public static boolean isRestricted() {
// return Base.getContext().isRestricted();
// }
//
// public static TypedArray obtainStyledAttributes(@StyleableRes int[] attrs) {
// return Base.getContext().obtainStyledAttributes(attrs);
// }
//
// public static TypedArray obtainStyledAttributes(AttributeSet set, @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
// return Base.getContext().obtainStyledAttributes(set, attrs, defStyleAttr, defStyleRes);
// }
//
// public static TypedArray obtainStyledAttributes(AttributeSet set, @StyleableRes int[] attrs) {
// return Base.getContext().obtainStyledAttributes(set, attrs);
// }
//
// public static TypedArray obtainStyledAttributes(@StyleRes int resid, @StyleableRes int[] attrs) {
// return Base.getContext().obtainStyledAttributes(resid, attrs);
// }
//
// public static FileInputStream openFileInput(String name) throws FileNotFoundException {
// return Base.getContext().openFileInput(name);
// }
//
// public static FileOutputStream openFileOutput(String name, int mode) throws FileNotFoundException {
// return Base.getContext().openFileOutput(name, mode);
// }
//
// public static SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
// return Base.getContext().openOrCreateDatabase(name, mode, factory);
// }
//
// @TargetApi(11)
// public static SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
// return Base.getContext().openOrCreateDatabase(name, mode, factory, errorHandler);
// }
//
// public static Drawable peekWallpaper() {
// return WallpaperManager.getInstance(Base.getContext()).peekDrawable();
// }
//
// @TargetApi(14)
// public static void registerComponentCallbacks(ComponentCallbacks callback) {
// Base.getContext().registerComponentCallbacks(callback);
// }
//
// public static Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
// return Base.getContext().registerReceiver(receiver, filter);
// }
//
// public static Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) {
// return Base.getContext().registerReceiver(receiver, filter, broadcastPermission, scheduler);
// }
//
//// public static void removeStickyBroadcast(Intent intent) {
//// Base.getContext().removeStickyBroadcast(intent);
//// }
////
//// @TargetApi(17)
//// public static void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
//// Base.getContext().removeStickyBroadcastAsUser(intent, user);
//// }
//
// public static void revokeUriPermission(Uri uri, int modeFlags) {
// Base.getContext().revokeUriPermission(uri, modeFlags);
// }
//
// public static void sendBroadcast(Intent intent, String receiverPermission) {
// Base.getContext().sendBroadcast(intent, receiverPermission);
// }
//
// public static void sendBroadcast(Intent intent) {
// Base.getContext().sendBroadcast(intent);
// }
//
// @TargetApi(17)
// public static void sendBroadcastAsUser(Intent intent, UserHandle user) {
// Base.getContext().sendBroadcastAsUser(intent, user);
// }
//
// @TargetApi(17)
// public static void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
// Base.getContext().sendBroadcastAsUser(intent, user, receiverPermission);
// }
//
// public static void sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
// Base.getContext().sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);
// }
//
// public static void sendOrderedBroadcast(Intent intent, String receiverPermission) {
// Base.getContext().sendOrderedBroadcast(intent, receiverPermission);
// }
//
// @TargetApi(17)
// public static void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
// Base.getContext().sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);
// }
//
//// public static void sendStickyBroadcast(Intent intent) {
//// Base.getContext().sendStickyBroadcast(intent);
//// }
////
//// @TargetApi(17)
//// public static void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
//// Base.getContext().sendStickyBroadcastAsUser(intent, user);
//// }
////
//// public static void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
//// Base.getContext().sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras);
//// }
////
//// @TargetApi(17)
//// public static void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
//// Base.getContext().sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode, initialData, initialExtras);
//// }
//
// public static void setTheme(@StyleRes int styleRes) {
// Base.getContext().setTheme(styleRes);
// }
//
// @SuppressLint("MissingPermission")
// public static void setWallpaper(InputStream data) throws IOException {
// WallpaperManager.getInstance(Base.getContext()).setStream(data);
// }
//
// @SuppressLint("MissingPermission")
// public static void setWallpaper(Bitmap bitmap) throws IOException {
// WallpaperManager.getInstance(Base.getContext()).setBitmap(bitmap);
// }
//
// public static boolean startActivities(Intent[] intents, Bundle options) {
// for (Intent intent : intents)
// if (intent != null)
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// return ContextCompat.startActivities(Base.getContext(), intents, options);
// }
//
// public static boolean startActivities(Intent[] intents) {
// for (Intent intent : intents)
// if (intent != null)
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// return ContextCompat.startActivities(Base.getContext(), intents);
// }
//
// public static void startActivity(@NonNull Intent intent) {
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Base.getContext().startActivity(intent);
// }
//
// @TargetApi(16)
// public static void startActivity(Intent intent, Bundle options) {
// Base.getContext().startActivity(intent, options);
// }
//
// public static boolean startInstrumentation(ComponentName className, String profileFile, Bundle arguments) {
// return Base.getContext().startInstrumentation(className, profileFile, arguments);
// }
//
// @TargetApi(16)
// public static void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) throws IntentSender.SendIntentException {
// Base.getContext().startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags, options);
// }
//
// public static void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) throws IntentSender.SendIntentException {
// Base.getContext().startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags);
// }
//
// public static ComponentName startService(Intent service) {
// return Base.getContext().startService(service);
// }
//
// public static boolean stopService(Intent service) {
// return Base.getContext().stopService(service);
// }
//
// public static void unbindService(ServiceConnection conn) {
// Base.getContext().unbindService(conn);
// }
//
// @TargetApi(14)
// public static void unregisterComponentCallbacks(ComponentCallbacks callback) {
// Base.getContext().unregisterComponentCallbacks(callback);
// }
//
// public static void unregisterReceiver(BroadcastReceiver receiver) {
// Base.getContext().unregisterReceiver(receiver);
// }
//}

View File

@ -0,0 +1,594 @@
package kr.lunaticbum.utils.content
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.app.WallpaperManager
import android.content.BroadcastReceiver
import android.content.ComponentCallbacks
import android.content.ComponentName
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.IntentSender
import android.content.IntentSender.SendIntentException
import android.content.ServiceConnection
import android.content.SharedPreferences
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.content.res.AssetManager
import android.content.res.ColorStateList
import android.content.res.Resources
import android.content.res.Resources.Theme
import android.content.res.TypedArray
import android.database.DatabaseErrorHandler
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteDatabase.CursorFactory
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.UserHandle
import android.util.AttributeSet
import androidx.annotation.AttrRes
import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.annotation.StyleRes
import androidx.annotation.StyleableRes
import androidx.core.content.ContextCompat
import kr.lunaticbum.Base.getContext
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
/**
* ContextUtil helps to manage [Context] conveniently.
*
* @author Leonardo Taehwan Kim
*/
open class ContextUtil {
companion object {
fun bindService(service: Intent?, conn: ServiceConnection?, flags: Int): Boolean {
return getContext().bindService(service!!, conn!!, flags)
}
fun checkCallingOrSelfPermission(permission: String?): Int {
return getContext().checkCallingOrSelfPermission(permission!!)
}
fun checkCallingOrSelfUriPermission(uri: Uri?, modeFlags: Int): Int {
return getContext().checkCallingOrSelfUriPermission(uri, modeFlags)
}
fun checkCallingPermission(permission: String?): Int {
return getContext().checkCallingPermission(permission!!)
}
fun checkCallingUriPermission(uri: Uri?, modeFlags: Int): Int {
return getContext().checkCallingUriPermission(uri, modeFlags)
}
fun checkPermission(permission: String?, pid: Int, uid: Int): Int {
return getContext().checkPermission(permission!!, pid, uid)
}
fun checkSelfPermission(permission: String): Int {
return ContextCompat.checkSelfPermission(getContext(), permission)
}
fun checkUriPermission(uri: Uri?, pid: Int, uid: Int, modeFlags: Int): Int {
return getContext().checkUriPermission(uri, pid, uid, modeFlags)
}
fun checkUriPermission(
uri: Uri?,
readPermission: String?,
writePermission: String?,
pid: Int,
uid: Int,
modeFlags: Int
): Int {
return getContext().checkUriPermission(
uri,
readPermission,
writePermission,
pid,
uid,
modeFlags
)
}
@Throws(PackageManager.NameNotFoundException::class)
fun createPackageContext(packageName: String?, flags: Int): Context {
return getContext().createPackageContext(packageName, flags)
}
fun databaseList(): Array<String> {
return getContext().databaseList()
}
fun deleteDatabase(name: String?): Boolean {
return getContext().deleteDatabase(name)
}
fun deleteFile(name: String?): Boolean {
return getContext().deleteFile(name)
}
fun enforceCallingOrSelfPermission(permission: String?, message: String?) {
getContext().enforceCallingOrSelfPermission(permission!!, message)
}
fun enforceCallingOrSelfUriPermission(uri: Uri?, modeFlags: Int, message: String?) {
getContext().enforceCallingOrSelfUriPermission(uri, modeFlags, message)
}
fun enforceCallingPermission(permission: String?, message: String?) {
getContext().enforceCallingPermission(permission!!, message)
}
fun enforceCallingUriPermission(uri: Uri?, modeFlags: Int, message: String?) {
getContext().enforceCallingUriPermission(uri, modeFlags, message)
}
fun enforcePermission(permission: String?, pid: Int, uid: Int, message: String?) {
getContext().enforcePermission(permission!!, pid, uid, message)
}
fun enforceUriPermission(uri: Uri?, pid: Int, uid: Int, modeFlags: Int, message: String?) {
getContext().enforceUriPermission(uri, pid, uid, modeFlags, message)
}
fun enforceUriPermission(
uri: Uri?,
readPermission: String?,
writePermission: String?,
pid: Int,
uid: Int,
modeFlags: Int,
message: String?
) {
getContext().enforceUriPermission(
uri,
readPermission,
writePermission,
pid,
uid,
modeFlags,
message
)
}
fun fileList(): Array<String> {
return getContext().fileList()
}
val applicationContext: Context
get() = getContext().applicationContext
val applicationInfo: ApplicationInfo
get() = getContext().applicationInfo
val assets: AssetManager
get() = getContext().assets
val cacheDir: File
get() = getContext().cacheDir
val classLoader: ClassLoader
get() = getContext().classLoader
val codeCacheDir: File
get() = ContextCompat.getCodeCacheDir(getContext())
@ColorInt
fun getColor(@ColorRes colorRes: Int): Int {
return ContextCompat.getColor(getContext(), colorRes)
}
fun getColorStateList(@ColorRes colorRes: Int): ColorStateList? {
return ContextCompat.getColorStateList(getContext(), colorRes)
}
val contentResolver: ContentResolver
get() = getContext().contentResolver
fun getDatabasePath(name: String?): File {
return getContext().getDatabasePath(name)
}
fun getDir(name: String?, mode: Int): File {
return getContext().getDir(name, mode)
}
fun getDrawable(@DrawableRes drawableRes: Int): Drawable? {
return ContextCompat.getDrawable(getContext(), drawableRes)
}
@get:TargetApi(8)
val externalCacheDir: File?
get() = getContext().externalCacheDir
val externalCacheDirs: Array<File>
get() = ContextCompat.getExternalCacheDirs(getContext())
@TargetApi(8)
fun getExternalFilesDir(type: String?): File? {
return getContext().getExternalFilesDir(type)
}
fun getExternalFilesDirs(type: String?): Array<File> {
return ContextCompat.getExternalFilesDirs(getContext(), type)
}
@get:TargetApi(21)
val externalMediaDirs: Array<File>
get() = getContext().externalMediaDirs
fun getFileStreamPath(name: String?): File {
return getContext().getFileStreamPath(name)
}
val filesDir: File
get() = getContext().filesDir
val mainLooper: Looper
get() = getContext().mainLooper
val noBackupFilesDir: File?
get() = ContextCompat.getNoBackupFilesDir(getContext())
@get:TargetApi(11)
val obbDir: File
get() = getContext().obbDir
val obbDirs: Array<File>
get() = ContextCompat.getObbDirs(getContext())
@get:TargetApi(8)
val packageCodePath: String
get() = getContext().packageCodePath
val packageManager: PackageManager
get() = getContext().packageManager
val packageName: String
get() = getContext().packageName
@get:TargetApi(8)
val packageResourcePath: String
get() = getContext().packageResourcePath
val resources: Resources
get() = getContext().resources
fun getSharedPreferences(name: String?, mode: Int): SharedPreferences {
return getContext().getSharedPreferences(name, mode)
}
fun getString(@StringRes stringRes: Int): String {
return getContext().getString(stringRes)
}
fun getString(@StringRes stringRes: Int, vararg formatArgs: Any?): String {
return getContext().getString(stringRes, *formatArgs)
}
@TargetApi(23)
fun <T> getSystemService(serviceClass: Class<T>): T {
return getContext().getSystemService(serviceClass)
}
fun getSystemService(name: String?): Any {
return getContext().getSystemService(name!!)
}
@TargetApi(23)
fun getSystemServiceName(serviceClass: Class<*>?): String? {
return getContext().getSystemServiceName(serviceClass!!)
}
fun getText(@StringRes stringRes: Int): CharSequence {
return getContext().getText(stringRes)
}
val theme: Theme
get() = getContext().theme
val wallpaper: Drawable?
@SuppressLint("MissingPermission")
get() = WallpaperManager.getInstance(getContext()).drawable
val wallpaperDesiredMinimumHeight: Int
get() = WallpaperManager.getInstance(getContext()).desiredMinimumHeight
val wallpaperDesiredMinimumWidth: Int
get() = WallpaperManager.getInstance(getContext()).desiredMinimumWidth
fun grantUriPermission(toPackage: String?, uri: Uri?, modeFlags: Int) {
getContext().grantUriPermission(toPackage, uri, modeFlags)
}
val isRestricted: Boolean
get() = getContext().isRestricted
fun obtainStyledAttributes(@StyleableRes attrs: IntArray?): TypedArray {
return getContext().obtainStyledAttributes(attrs!!)
}
fun obtainStyledAttributes(
set: AttributeSet?,
@StyleableRes attrs: IntArray?,
@AttrRes defStyleAttr: Int,
@StyleRes defStyleRes: Int
): TypedArray {
return getContext().obtainStyledAttributes(
set,
attrs!!, defStyleAttr, defStyleRes
)
}
fun obtainStyledAttributes(set: AttributeSet?, @StyleableRes attrs: IntArray?): TypedArray {
return getContext().obtainStyledAttributes(set, attrs!!)
}
fun obtainStyledAttributes(
@StyleRes resid: Int,
@StyleableRes attrs: IntArray?
): TypedArray {
return getContext().obtainStyledAttributes(resid, attrs!!)
}
@Throws(FileNotFoundException::class)
fun openFileInput(name: String?): FileInputStream {
return getContext().openFileInput(name)
}
@Throws(FileNotFoundException::class)
fun openFileOutput(name: String?, mode: Int): FileOutputStream {
return getContext().openFileOutput(name, mode)
}
fun openOrCreateDatabase(
name: String?,
mode: Int,
factory: CursorFactory?
): SQLiteDatabase {
return getContext().openOrCreateDatabase(name, mode, factory)
}
@TargetApi(11)
fun openOrCreateDatabase(
name: String?,
mode: Int,
factory: CursorFactory?,
errorHandler: DatabaseErrorHandler?
): SQLiteDatabase {
return getContext().openOrCreateDatabase(name, mode, factory, errorHandler)
}
@SuppressLint("MissingPermission")
fun peekWallpaper(): Drawable? {
return WallpaperManager.getInstance(getContext()).peekDrawable()
}
@TargetApi(14)
fun registerComponentCallbacks(callback: ComponentCallbacks?) {
getContext().registerComponentCallbacks(callback)
}
fun registerReceiver(receiver: BroadcastReceiver?, filter: IntentFilter?): Intent? {
return getContext().registerReceiver(receiver, filter)
}
fun registerReceiver(
receiver: BroadcastReceiver?,
filter: IntentFilter?,
broadcastPermission: String?,
scheduler: Handler?
): Intent? {
return getContext().registerReceiver(receiver, filter, broadcastPermission, scheduler)
}
// public static void removeStickyBroadcast(Intent intent) {
// Base.getContext().removeStickyBroadcast(intent);
// }
//
// @TargetApi(17)
// public static void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
// Base.getContext().removeStickyBroadcastAsUser(intent, user);
// }
fun revokeUriPermission(uri: Uri?, modeFlags: Int) {
getContext().revokeUriPermission(uri, modeFlags)
}
fun sendBroadcast(intent: Intent?, receiverPermission: String?) {
getContext().sendBroadcast(intent, receiverPermission)
}
fun sendBroadcast(intent: Intent?) {
getContext().sendBroadcast(intent)
}
@SuppressLint("MissingPermission")
@TargetApi(17)
fun sendBroadcastAsUser(intent: Intent?, user: UserHandle?) {
getContext().sendBroadcastAsUser(intent, user)
}
@SuppressLint("MissingPermission")
@TargetApi(17)
fun sendBroadcastAsUser(intent: Intent?, user: UserHandle?, receiverPermission: String?) {
getContext().sendBroadcastAsUser(intent, user, receiverPermission)
}
fun sendOrderedBroadcast(
intent: Intent?,
receiverPermission: String?,
resultReceiver: BroadcastReceiver?,
scheduler: Handler?,
initialCode: Int,
initialData: String?,
initialExtras: Bundle?
) {
getContext().sendOrderedBroadcast(
intent!!,
receiverPermission,
resultReceiver,
scheduler,
initialCode,
initialData,
initialExtras
)
}
fun sendOrderedBroadcast(intent: Intent?, receiverPermission: String?) {
getContext().sendOrderedBroadcast(intent, receiverPermission)
}
@SuppressLint("MissingPermission")
@TargetApi(17)
fun sendOrderedBroadcastAsUser(
intent: Intent?,
user: UserHandle?,
receiverPermission: String?,
resultReceiver: BroadcastReceiver?,
scheduler: Handler?,
initialCode: Int,
initialData: String?,
initialExtras: Bundle?
) {
getContext().sendOrderedBroadcastAsUser(
intent,
user,
receiverPermission,
resultReceiver,
scheduler,
initialCode,
initialData,
initialExtras
)
}
// public static void sendStickyBroadcast(Intent intent) {
// Base.getContext().sendStickyBroadcast(intent);
// }
//
// @TargetApi(17)
// public static void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
// Base.getContext().sendStickyBroadcastAsUser(intent, user);
// }
//
// public static void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
// Base.getContext().sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras);
// }
//
// @TargetApi(17)
// public static void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
// Base.getContext().sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode, initialData, initialExtras);
// }
fun setTheme(@StyleRes styleRes: Int) {
getContext().setTheme(styleRes)
}
@SuppressLint("MissingPermission")
@Throws(IOException::class)
fun setWallpaper(data: InputStream?) {
WallpaperManager.getInstance(getContext()).setStream(data)
}
@SuppressLint("MissingPermission")
@Throws(IOException::class)
fun setWallpaper(bitmap: Bitmap?) {
WallpaperManager.getInstance(getContext()).setBitmap(bitmap)
}
fun startActivities(intents: Array<Intent?>, options: Bundle?): Boolean {
for (intent in intents) intent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
return ContextCompat.startActivities(getContext(), intents, options)
}
fun startActivities(intents: Array<Intent?>): Boolean {
for (intent in intents) intent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
return ContextCompat.startActivities(getContext(), intents)
}
fun startActivity(intent: Intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
getContext().startActivity(intent)
}
@TargetApi(16)
fun startActivity(intent: Intent?, options: Bundle?) {
getContext().startActivity(intent, options)
}
fun startInstrumentation(
className: ComponentName?,
profileFile: String?,
arguments: Bundle?
): Boolean {
return getContext().startInstrumentation(className!!, profileFile, arguments)
}
@TargetApi(16)
@Throws(SendIntentException::class)
fun startIntentSender(
intent: IntentSender?,
fillInIntent: Intent?,
flagsMask: Int,
flagsValues: Int,
extraFlags: Int,
options: Bundle?
) {
getContext().startIntentSender(
intent,
fillInIntent,
flagsMask,
flagsValues,
extraFlags,
options
)
}
@Throws(SendIntentException::class)
fun startIntentSender(
intent: IntentSender?,
fillInIntent: Intent?,
flagsMask: Int,
flagsValues: Int,
extraFlags: Int
) {
getContext().startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags)
}
fun startService(service: Intent?): ComponentName? {
return getContext().startService(service)
}
fun stopService(service: Intent?): Boolean {
return getContext().stopService(service)
}
fun unbindService(conn: ServiceConnection?) {
getContext().unbindService(conn!!)
}
@TargetApi(14)
fun unregisterComponentCallbacks(callback: ComponentCallbacks?) {
getContext().unregisterComponentCallbacks(callback)
}
fun unregisterReceiver(receiver: BroadcastReceiver?) {
getContext().unregisterReceiver(receiver)
}
}
}

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.content;
package kr.lunaticbum.utils.content;
/**
* Ctx is abbreviation class of {@link ContextUtil}.

View File

@ -0,0 +1,9 @@
//package kr.lunaticbum.utils.content;
//
///**
// * Res is abbreviation class of {@link ResourcesUtil}.
// *
// * @author Leonardo Taehwan Kim
// */
//public class Res extends ResourcesUtil {
//}

View File

@ -0,0 +1,8 @@
package kr.lunaticbum.utils.content
/**
* Res is abbreviation class of [ResourcesUtil].
*
* @author Leonardo Taehwan Kim
*/
//class Res : ResourcesUtil()

View File

@ -0,0 +1,278 @@
//package kr.lunaticbum.utils.content;
//
//import android.content.res.AssetFileDescriptor;
//import android.content.res.AssetManager;
//import android.content.res.ColorStateList;
//import android.content.res.Configuration;
//import android.content.res.Resources;
//import android.content.res.TypedArray;
//import android.content.res.XmlResourceParser;
//import android.graphics.Movie;
//import android.graphics.drawable.Drawable;
//import android.os.Bundle;
//import android.util.AttributeSet;
//import android.util.DisplayMetrics;
//import android.util.TypedValue;
//
//import androidx.annotation.AnimRes;
//import androidx.annotation.AnyRes;
//import androidx.annotation.ArrayRes;
//import androidx.annotation.BoolRes;
//import androidx.annotation.ColorInt;
//import androidx.annotation.ColorRes;
//import androidx.annotation.DimenRes;
//import androidx.annotation.DrawableRes;
//import androidx.annotation.IntegerRes;
//import androidx.annotation.LayoutRes;
//import androidx.annotation.PluralsRes;
//import androidx.annotation.RawRes;
//import androidx.annotation.StringRes;
//import androidx.annotation.XmlRes;
//
//import kr.lunaticbum.Base;
//import kr.lunaticbum.utils.etc.APILevel;
//
//import org.xmlpull.v1.XmlPullParserException;
//
//import java.io.IOException;
//import java.io.InputStream;
//
///**
// * ResourcesUtil helps to manage {@link Resources} conveniently.
// *
// * @author Leonardo Taehwan Kim
// */
//public class ResourcesUtil {
//
// private static void finishPreloading() {
// Base.getResources().finishPreloading();
// }
//
// private static void flushLayoutCache() {
// Base.getResources().flushLayoutCache();
// }
//
// public static XmlResourceParser getAnimation(@AnimRes int animRes) {
// return Base.getResources().getAnimation(animRes);
// }
//
// public static AssetManager getAssets() {
// return Base.getResources().getAssets();
// }
//
// public static boolean getBoolean(@BoolRes int boolRes) {
// return Base.getResources().getBoolean(boolRes);
// }
//
// @ColorInt
// public static int getColor(@ColorRes int colorRes) {
// return ContextUtil.getColor(colorRes);
// }
//
// @ColorInt
// public static int getColor(@ColorRes int colorRes, Resources.Theme theme) {
// if (APILevel.require(23))
// return Base.getResources().getColor(colorRes, theme);
// else
// return getColor(colorRes);
// }
//
// public static ColorStateList getColorStateList(@ColorRes int colorRes) {
// return ContextUtil.getColorStateList(colorRes);
// }
//
// public static ColorStateList getColorStateList(@ColorRes int colorRes, Resources.Theme theme) {
// if (APILevel.require(23))
// return Base.getResources().getColorStateList(colorRes, theme);
// else
// return getColorStateList(colorRes);
// }
//
// public static Configuration getConfiguration() {
// return Base.getConfiguration();
// }
//
// public static float getDimension(@DimenRes int dimenRes) {
// return Base.getResources().getDimension(dimenRes);
// }
//
// public static int getDimensionPixelOffset(@DimenRes int dimenRes) {
// return Base.getResources().getDimensionPixelOffset(dimenRes);
// }
//
// public static int getDimensionPixelSize(@DimenRes int dimenRes) {
// return Base.getResources().getDimensionPixelSize(dimenRes);
// }
//
// public static DisplayMetrics getDisplayMetrics() {
// return Base.getDisplayMetrics();
// }
//
// public static Drawable getDrawable(@DrawableRes int drawableRes) {
// return ContextUtil.getDrawable(drawableRes);
// }
//
// public static Drawable getDrawable(@DrawableRes int drawableRes, Resources.Theme theme) {
// if (APILevel.require(21))
// return Base.getResources().getDrawable(drawableRes, theme);
// else
// return Base.getResources().getDrawable(drawableRes);
// }
//
// public static Drawable getDrawableForDensity(@DrawableRes int drawableRes, int density) {
// if (APILevel.require(21))
// return Base.getResources().getDrawableForDensity(drawableRes, density, Base.getContext().getTheme());
// else if (APILevel.require(15))
// return Base.getResources().getDrawableForDensity(drawableRes, density);
// else
// return Base.getResources().getDrawable(drawableRes);
// }
//
// public static float getFraction(int id, int base, int pbase) {
// return Base.getResources().getFraction(id, base, pbase);
// }
//
// public static int getIdentifier(String name, String defType, String defPackage) {
// return Base.getResources().getIdentifier(name, defType, defPackage);
// }
//
// public static int[] getIntArray(@ArrayRes int arrayRes) {
// return Base.getResources().getIntArray(arrayRes);
// }
//
// public static int getInteger(@IntegerRes int integerRes) {
// return Base.getResources().getInteger(integerRes);
// }
//
// public static XmlResourceParser getLayout(@LayoutRes int layoutRes) {
// return Base.getResources().getLayout(layoutRes);
// }
//
// public static Movie getMovie(@RawRes int rawRes) {
// return Base.getResources().getMovie(rawRes);
// }
//
// public static String getQuantityString(int id, int quantity, Object... formatArgs) {
// return Base.getResources().getQuantityString(id, quantity, formatArgs);
// }
//
// public static String getQuantityString(@PluralsRes int pluralsRes, int quantity) throws Resources.NotFoundException {
// return Base.getResources().getQuantityString(pluralsRes, quantity);
// }
//
// public static CharSequence getQuantityText(int id, int quantity) {
// return Base.getResources().getQuantityText(id, quantity);
// }
//
// public static String getResourceEntryName(@AnyRes int anyRes) {
// return Base.getResources().getResourceEntryName(anyRes);
// }
//
// public static String getResourceName(@AnyRes int anyRes) {
// return Base.getResources().getResourceName(anyRes);
// }
//
// public static String getResourcePackageName(@AnyRes int anyRes) {
// return Base.getResources().getResourcePackageName(anyRes);
// }
//
// public static String getResourceTypeName(@AnyRes int anyRes) {
// return Base.getResources().getResourceTypeName(anyRes);
// }
//
// public static String getString(@StringRes int stringRes) {
// return Base.getResources().getString(stringRes);
// }
//
// public static String getString(@StringRes int stringRes, Object... formatArgs) {
// return Base.getResources().getString(stringRes, formatArgs);
// }
//
// public static String[] getStringArray(@ArrayRes int arrayRes) {
// return Base.getResources().getStringArray(arrayRes);
// }
//
// public static Resources getSystem() {
// return Base.getResources().getSystem();
// }
//
// public static CharSequence getText(@StringRes int stringRes, CharSequence def) {
// return Base.getResources().getText(stringRes, def);
// }
//
// public static CharSequence getText(@StringRes int stringRes) {
// return Base.getResources().getText(stringRes);
// }
//
// public static CharSequence[] getTextArray(@ArrayRes int arrayRes) {
// return Base.getResources().getTextArray(arrayRes);
// }
//
// public static void getValue(String name, TypedValue outValue, boolean resolveRefs) {
// Base.getResources().getValue(name, outValue, resolveRefs);
// }
//
// public static void getValue(@AnyRes int anyRes, TypedValue outValue, boolean resolveRefs) {
// Base.getResources().getValue(anyRes, outValue, resolveRefs);
// }
//
// public static void getValueForDensity(@AnyRes int anyRes, int density, TypedValue outValue, boolean resolveRefs) {
// if (APILevel.require(15))
// Base.getResources().getValueForDensity(anyRes, density, outValue, resolveRefs);
// else
// Base.getResources().getValue(anyRes, outValue, resolveRefs);
// }
//
// public static XmlResourceParser getXml(@XmlRes int xmlRes) {
// return Base.getResources().getXml(xmlRes);
// }
//
// public static Resources.Theme newTheme() {
// return Base.getResources().newTheme();
// }
//
// public static TypedArray obtainAttributes(AttributeSet set, int[] attrs) {
// return Base.getResources().obtainAttributes(set, attrs);
// }
//
// public static TypedArray obtainTypedArray(@ArrayRes int anyRes) {
// return Base.getResources().obtainTypedArray(anyRes);
// }
//
// public static InputStream openRawResource(@RawRes int rawRes) {
// return Base.getResources().openRawResource(rawRes);
// }
//
// public static InputStream openRawResource(@RawRes int rawRes, TypedValue value) {
// return Base.getResources().openRawResource(rawRes, value);
// }
//
// public static AssetFileDescriptor openRawResourceFd(@RawRes int rawRes) {
// return Base.getResources().openRawResourceFd(rawRes);
// }
//
// public static void parseBundleExtra(String tagName, AttributeSet attrs, Bundle outBundle) throws XmlPullParserException {
// Base.getResources().parseBundleExtra(tagName, attrs, outBundle);
// }
//
// public static void parseBundleExtras(XmlResourceParser parser, Bundle outBundle) throws XmlPullParserException, IOException {
// Base.getResources().parseBundleExtras(parser, outBundle);
// }
//
// public static void updateConfiguration(Configuration config, DisplayMetrics metrics) {
// Base.getResources().updateConfiguration(config, metrics);
// }
//
// // Added methods
// public static int[] getColorArray(@ArrayRes int array) {
// if (array == 0)
// return null;
//
// TypedArray typedArray = Base.getResources().obtainTypedArray(array);
// int[] colors = new int[typedArray.length()];
// for (int i = 0; i < typedArray.length(); i++)
// colors[i] = typedArray.getColor(i, 0);
// typedArray.recycle();
// return colors;
// }
//}

View File

@ -0,0 +1,276 @@
package kr.lunaticbum.utils.content
import android.content.res.AssetFileDescriptor
import android.content.res.AssetManager
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.content.res.Resources
import android.content.res.Resources.Theme
import android.content.res.TypedArray
import android.content.res.XmlResourceParser
import android.graphics.Movie
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.util.TypedValue
import androidx.annotation.AnimRes
import androidx.annotation.AnyRes
import androidx.annotation.ArrayRes
import androidx.annotation.BoolRes
import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.annotation.DimenRes
import androidx.annotation.DrawableRes
import androidx.annotation.IntegerRes
import androidx.annotation.LayoutRes
import androidx.annotation.PluralsRes
import androidx.annotation.RawRes
import androidx.annotation.StringRes
import androidx.annotation.XmlRes
import kr.lunaticbum.Base
import kr.lunaticbum.Base.getContext
import kr.lunaticbum.Base.resources
import kr.lunaticbum.utils.etc.APILevel
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
import java.io.InputStream
/**
* ResourcesUtil helps to manage [Resources] conveniently.
*
* @author Leonardo Taehwan Kim
*/
object ResourcesUtil {
private fun finishPreloading() {
resources.finishPreloading()
}
private fun flushLayoutCache() {
resources.flushLayoutCache()
}
fun getAnimation(@AnimRes animRes: Int): XmlResourceParser {
return resources.getAnimation(animRes)
}
val assets: AssetManager
get() = resources.assets
fun getBoolean(@BoolRes boolRes: Int): Boolean {
return resources.getBoolean(boolRes)
}
@ColorInt
fun getColor(@ColorRes colorRes: Int): Int {
return ContextUtil.getColor(colorRes)
}
@ColorInt
fun getColor(@ColorRes colorRes: Int, theme: Theme?): Int {
return if (APILevel.require(23)) resources.getColor(colorRes, theme)
else getColor(colorRes)
}
fun getColorStateList(@ColorRes colorRes: Int): ColorStateList? {
return ContextUtil.getColorStateList(colorRes)
}
fun getColorStateList(@ColorRes colorRes: Int, theme: Theme?): ColorStateList? {
return if (APILevel.require(23)) resources.getColorStateList(colorRes, theme)
else getColorStateList(colorRes)
}
val configuration: Configuration
get() = Base.configuration
fun getDimension(@DimenRes dimenRes: Int): Float {
return resources.getDimension(dimenRes)
}
fun getDimensionPixelOffset(@DimenRes dimenRes: Int): Int {
return resources.getDimensionPixelOffset(dimenRes)
}
fun getDimensionPixelSize(@DimenRes dimenRes: Int): Int {
return resources.getDimensionPixelSize(dimenRes)
}
val displayMetrics: DisplayMetrics
get() = Base.displayMetrics
fun getDrawable(@DrawableRes drawableRes: Int): Drawable? {
return ContextUtil.getDrawable(drawableRes)
}
fun getDrawable(@DrawableRes drawableRes: Int, theme: Theme?): Drawable {
return if (APILevel.require(21)) resources.getDrawable(drawableRes, theme)
else resources.getDrawable(drawableRes)
}
fun getDrawableForDensity(@DrawableRes drawableRes: Int, density: Int): Drawable? {
return if (APILevel.require(21)) resources.getDrawableForDensity(
drawableRes,
density,
getContext().theme
)
else if (APILevel.require(15)) resources.getDrawableForDensity(drawableRes, density)
else resources.getDrawable(drawableRes)
}
fun getFraction(id: Int, base: Int, pbase: Int): Float {
return resources.getFraction(id, base, pbase)
}
fun getIdentifier(name: String?, defType: String?, defPackage: String?): Int {
return resources.getIdentifier(name, defType, defPackage)
}
fun getIntArray(@ArrayRes arrayRes: Int): IntArray {
return resources.getIntArray(arrayRes)
}
fun getInteger(@IntegerRes integerRes: Int): Int {
return resources.getInteger(integerRes)
}
fun getLayout(@LayoutRes layoutRes: Int): XmlResourceParser {
return resources.getLayout(layoutRes)
}
fun getMovie(@RawRes rawRes: Int): Movie {
return resources.getMovie(rawRes)
}
fun getQuantityString(id: Int, quantity: Int, vararg formatArgs: Any?): String {
return resources.getQuantityString(id, quantity, *formatArgs)
}
@Throws(Resources.NotFoundException::class)
fun getQuantityString(@PluralsRes pluralsRes: Int, quantity: Int): String {
return resources.getQuantityString(pluralsRes, quantity)
}
fun getQuantityText(id: Int, quantity: Int): CharSequence {
return resources.getQuantityText(id, quantity)
}
fun getResourceEntryName(@AnyRes anyRes: Int): String {
return resources.getResourceEntryName(anyRes)
}
fun getResourceName(@AnyRes anyRes: Int): String {
return resources.getResourceName(anyRes)
}
fun getResourcePackageName(@AnyRes anyRes: Int): String {
return resources.getResourcePackageName(anyRes)
}
fun getResourceTypeName(@AnyRes anyRes: Int): String {
return resources.getResourceTypeName(anyRes)
}
fun getString(@StringRes stringRes: Int): String {
return resources.getString(stringRes)
}
fun getString(@StringRes stringRes: Int, vararg formatArgs: Any?): String {
return resources.getString(stringRes, *formatArgs)
}
fun getStringArray(@ArrayRes arrayRes: Int): Array<String> {
return resources.getStringArray(arrayRes)
}
val system: Resources
get() = Resources.getSystem()
fun getText(@StringRes stringRes: Int, def: CharSequence?): CharSequence {
return resources.getText(stringRes, def)
}
fun getText(@StringRes stringRes: Int): CharSequence {
return resources.getText(stringRes)
}
fun getTextArray(@ArrayRes arrayRes: Int): Array<CharSequence> {
return resources.getTextArray(arrayRes)
}
fun getValue(name: String?, outValue: TypedValue?, resolveRefs: Boolean) {
resources.getValue(name, outValue, resolveRefs)
}
fun getValue(@AnyRes anyRes: Int, outValue: TypedValue?, resolveRefs: Boolean) {
resources.getValue(anyRes, outValue, resolveRefs)
}
fun getValueForDensity(
@AnyRes anyRes: Int,
density: Int,
outValue: TypedValue?,
resolveRefs: Boolean
) {
if (APILevel.require(15)) resources.getValueForDensity(
anyRes,
density,
outValue,
resolveRefs
)
else resources.getValue(anyRes, outValue, resolveRefs)
}
fun getXml(@XmlRes xmlRes: Int): XmlResourceParser {
return resources.getXml(xmlRes)
}
fun newTheme(): Theme {
return resources.newTheme()
}
fun obtainAttributes(set: AttributeSet?, attrs: IntArray?): TypedArray {
return resources.obtainAttributes(set, attrs)
}
fun obtainTypedArray(@ArrayRes anyRes: Int): TypedArray {
return resources.obtainTypedArray(anyRes)
}
fun openRawResource(@RawRes rawRes: Int): InputStream {
return resources.openRawResource(rawRes)
}
fun openRawResource(@RawRes rawRes: Int, value: TypedValue?): InputStream {
return resources.openRawResource(rawRes, value)
}
fun openRawResourceFd(@RawRes rawRes: Int): AssetFileDescriptor {
return resources.openRawResourceFd(rawRes)
}
@Throws(XmlPullParserException::class)
fun parseBundleExtra(tagName: String?, attrs: AttributeSet?, outBundle: Bundle?) {
resources.parseBundleExtra(tagName, attrs, outBundle)
}
@Throws(XmlPullParserException::class, IOException::class)
fun parseBundleExtras(parser: XmlResourceParser?, outBundle: Bundle?) {
resources.parseBundleExtras(parser, outBundle)
}
fun updateConfiguration(config: Configuration?, metrics: DisplayMetrics?) {
resources.updateConfiguration(config, metrics)
}
// Added methods
fun getColorArray(@ArrayRes array: Int): IntArray? {
if (array == 0) return null
val typedArray = resources.obtainTypedArray(array)
val colors = IntArray(typedArray.length())
for (i in 0 until typedArray.length()) colors[i] = typedArray.getColor(i, 0)
typedArray.recycle()
return colors
}
}

View File

@ -0,0 +1,64 @@
//package kr.lunaticbum.utils.content;
//
//import android.annotation.TargetApi;
//import android.content.res.Resources;
//import android.content.res.TypedArray;
//import android.graphics.drawable.Drawable;
//import android.util.AttributeSet;
//import android.util.TypedValue;
//
//import androidx.annotation.AttrRes;
//import androidx.annotation.DrawableRes;
//import androidx.annotation.StyleRes;
//import androidx.annotation.StyleableRes;
//
//import kr.lunaticbum.Base;
//
///**
// * ThemeUtil helps to manage {@link Resources.Theme} conveniently.
// *
// * @author Leonardo Taehwan Kim
// */
//public class ThemeUtil {
//
// public static void applyStyle(int resId, boolean force) {
// Base.getTheme().applyStyle(resId, force);
// }
//
// public static void dump(int priority, String tag, String prefix) {
// Base.getTheme().dump(priority, tag, prefix);
// }
//
// @TargetApi(23)
// public static int getChangingConfigurations() {
// return Base.getTheme().getChangingConfigurations();
// }
//
// public static Drawable getDrawable(@DrawableRes int drawableRes) {
// return ResourcesUtil.getDrawable(drawableRes);
// }
//
// public static Resources getResources() {
// return Base.getResources();
// }
//
// public static TypedArray obtainStyledAttributes(@StyleableRes int[] attrs) {
// return Base.getTheme().obtainStyledAttributes(attrs);
// }
//
// public static TypedArray obtainStyledAttributes(@StyleRes int resid, @StyleableRes int[] attrs) {
// return Base.getTheme().obtainStyledAttributes(resid, attrs);
// }
//
// public static TypedArray obtainStyledAttributes(AttributeSet set, @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
// return Base.getTheme().obtainStyledAttributes(set, attrs, defStyleAttr, defStyleRes);
// }
//
// public static boolean resolveAttribute(int resid, TypedValue outValue, boolean resolveRefs) {
// return Base.getTheme().resolveAttribute(resid, outValue, resolveRefs);
// }
//
// public static void setTo(Resources.Theme other) {
// Base.getTheme().setTo(other);
// }
//}

View File

@ -0,0 +1,69 @@
package kr.lunaticbum.utils.content
import android.annotation.TargetApi
import android.content.res.Resources
import android.content.res.Resources.Theme
import android.content.res.TypedArray
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.util.TypedValue
import androidx.annotation.AttrRes
import androidx.annotation.DrawableRes
import androidx.annotation.StyleRes
import androidx.annotation.StyleableRes
import kr.lunaticbum.Base
import kr.lunaticbum.Base.theme
/**
* ThemeUtil helps to manage [Resources.Theme] conveniently.
*
* @author Leonardo Taehwan Kim
*/
object ThemeUtil {
fun applyStyle(resId: Int, force: Boolean) {
theme.applyStyle(resId, force)
}
fun dump(priority: Int, tag: String?, prefix: String?) {
theme.dump(priority, tag, prefix)
}
@get:TargetApi(23)
val changingConfigurations: Int
get() = theme.changingConfigurations
fun getDrawable(@DrawableRes drawableRes: Int): Drawable? {
return ResourcesUtil.getDrawable(drawableRes)
}
val resources: Resources
get() = Base.resources
fun obtainStyledAttributes(@StyleableRes attrs: IntArray?): TypedArray {
return theme.obtainStyledAttributes(attrs!!)
}
fun obtainStyledAttributes(@StyleRes resid: Int, @StyleableRes attrs: IntArray?): TypedArray {
return theme.obtainStyledAttributes(resid, attrs!!)
}
fun obtainStyledAttributes(
set: AttributeSet?,
@StyleableRes attrs: IntArray?,
@AttrRes defStyleAttr: Int,
@StyleRes defStyleRes: Int
): TypedArray {
return theme.obtainStyledAttributes(
set,
attrs!!, defStyleAttr, defStyleRes
)
}
fun resolveAttribute(resid: Int, outValue: TypedValue?, resolveRefs: Boolean): Boolean {
return theme.resolveAttribute(resid, outValue, resolveRefs)
}
fun setTo(other: Theme?) {
theme.setTo(other)
}
}

View File

@ -0,0 +1,29 @@
//package kr.lunaticbum.utils.content;
//
//import android.util.TypedValue;
//
//import kr.lunaticbum.Base;
//
///**
// * TypedValueUtil helps to manage {@link TypedValue} class conveniently.
// *
// * @author Leonardo Taehwan Kim
// */
//public class TypedValueUtil {
//
// public static float applyDimension(int unit, float value) {
// return TypedValue.applyDimension(unit, value, Base.getDisplayMetrics());
// }
//
// public static float complexToDimension(int data) {
// return TypedValue.complexToDimension(data, Base.getDisplayMetrics());
// }
//
// public static int complexToDimensionPixelOffset(int data) {
// return TypedValue.complexToDimensionPixelOffset(data, Base.getDisplayMetrics());
// }
//
// public static int complexToDimensionPixelSize(int data) {
// return TypedValue.complexToDimensionPixelSize(data, Base.getDisplayMetrics());
// }
//}

View File

@ -0,0 +1,27 @@
package kr.lunaticbum.utils.content
import android.util.TypedValue
import kr.lunaticbum.Base.displayMetrics
/**
* TypedValueUtil helps to manage [TypedValue] class conveniently.
*
* @author Leonardo Taehwan Kim
*/
object TypedValueUtil {
fun applyDimension(unit: Int, value: Float): Float {
return TypedValue.applyDimension(unit, value, displayMetrics)
}
fun complexToDimension(data: Int): Float {
return TypedValue.complexToDimension(data, displayMetrics)
}
fun complexToDimensionPixelOffset(data: Int): Int {
return TypedValue.complexToDimensionPixelOffset(data, displayMetrics)
}
fun complexToDimensionPixelSize(data: Int): Int {
return TypedValue.complexToDimensionPixelSize(data, displayMetrics)
}
}

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.etc;
package kr.lunaticbum.utils.etc;
import android.os.Build;

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.etc;
package kr.lunaticbum.utils.etc;
/**
* IntArrayUtil helps to manage IntArray conveniently.

View File

@ -0,0 +1,58 @@
//package kr.lunaticbum.utils.etc;
//
//import android.content.ActivityNotFoundException;
//import android.content.Intent;
//import android.content.pm.PackageManager;
//import android.net.Uri;
//
//import kr.lunaticbum.Base;
//
///**
// * PackageUtil helps to handle methods related to package.
// *
// * @author Leonardo Taehwan Kim
// */
//public class PackageUtil {
//
// public static final String FACEBOOK = "com.facebook.katana";
// public static final String TWITTER = "com.twitter.android";
// public static final String GOOGLE_PLUS = "com.google.android.apps.plus";
// public static final String GMAIL = "com.google.android.gm";
// public static final String PINTEREST = "com.pinterest";
// public static final String TUMBLR = "com.tumblr";
// public static final String FANCY = "com.thefancy.app";
// public static final String FLIPBOARD = "flipboard.app";
// public static final String KAKAOTALK = "com.kakao.talk";
// public static final String KAKAOSTORY = "com.kakao.story";
//
// public static boolean isInstalled(String packageName) {
// PackageManager packageManager = Base.getContext().getPackageManager();
// try {
// packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
// return true;
// } catch (PackageManager.NameNotFoundException e) {
// return false;
// }
// }
//
// public static String getPackageName() {
// return Base.getContext().getPackageName();
// }
//
// public static void openPlayStore() {
// String packageName = Base.getContext().getPackageName();
// openPlayStore(packageName);
// }
//
// public static void openPlayStore(String packageName) {
// try {
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Base.getContext().startActivity(intent);
// } catch (ActivityNotFoundException exception) {
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageName));
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Base.getContext().startActivity(intent);
// }
// }
//}

View File

@ -0,0 +1,63 @@
package kr.lunaticbum.utils.etc
import android.content.ActivityNotFoundException
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import kr.lunaticbum.Base.getContext
/**
* PackageUtil helps to handle methods related to package.
*
* @author Leonardo Taehwan Kim
*/
object PackageUtil {
const val FACEBOOK: String = "com.facebook.katana"
const val TWITTER: String = "com.twitter.android"
const val GOOGLE_PLUS: String = "com.google.android.apps.plus"
const val GMAIL: String = "com.google.android.gm"
const val PINTEREST: String = "com.pinterest"
const val TUMBLR: String = "com.tumblr"
const val FANCY: String = "com.thefancy.app"
const val FLIPBOARD: String = "flipboard.app"
const val KAKAOTALK: String = "com.kakao.talk"
const val KAKAOSTORY: String = "com.kakao.story"
fun isInstalled(packageName: String?): Boolean {
val packageManager = getContext().packageManager
try {
packageManager.getPackageInfo(packageName!!, PackageManager.GET_ACTIVITIES)
return true
} catch (e: PackageManager.NameNotFoundException) {
return false
}
}
val packageName: String
get() = getContext().packageName
fun openPlayStore() {
val packageName = getContext().packageName
openPlayStore(packageName)
}
fun openPlayStore(packageName: String) {
try {
val intent = Intent(
Intent.ACTION_VIEW, Uri.parse(
"market://details?id=$packageName"
)
)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
getContext().startActivity(intent)
} catch (exception: ActivityNotFoundException) {
val intent = Intent(
Intent.ACTION_VIEW, Uri.parse(
"http://play.google.com/store/apps/details?id=$packageName"
)
)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
getContext().startActivity(intent)
}
}
}

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.etc;
package kr.lunaticbum.utils.etc;
import android.util.SparseArray;

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.etc;
package kr.lunaticbum.utils.etc;
import android.os.Looper;

View File

@ -0,0 +1,55 @@
//package kr.lunaticbum.utils.etc;
//
//import android.graphics.Typeface;
//import android.widget.TextView;
//
//import androidx.annotation.NonNull;
//import androidx.collection.SimpleArrayMap;
//
//import kr.lunaticbum.Base;
//
///**
// * TypefaceUtil helps to retrieve typeface from assets folder.
// *
// * @author Leonardo Taehwan Kim
// */
//public class TypefaceUtil {
//
// private static final SimpleArrayMap<String, Typeface> cache = new SimpleArrayMap<>();
//
// public static Typeface get(@NonNull String path) {
// synchronized (cache) {
// if (cache.containsKey(path))
// return cache.get(path);
//
// try {
// Typeface typeface = Typeface.createFromAsset(Base.getContext().getAssets(), path);
// cache.put(path, typeface);
// return typeface;
// } catch (RuntimeException e) {
// return null;
// }
// }
// }
//
// public static void setTypeface(@NonNull String path, TextView... textViews) {
// if (textViews == null)
// return;
//
// for (TextView textView : textViews)
// if (textView != null)
// textView.setTypeface(get(path));
// }
//
// public static void setTypeface(@NonNull String path, boolean includeFontPadding, TextView... textViews) {
// if (textViews == null)
// return;
//
// for (TextView textView : textViews) {
// if (textView != null) {
// textView.setTypeface(get(path));
// textView.setIncludeFontPadding(includeFontPadding);
// }
// }
// }
//}

View File

@ -0,0 +1,47 @@
package kr.lunaticbum.utils.etc
import android.graphics.Typeface
import android.widget.TextView
import androidx.collection.SimpleArrayMap
import kr.lunaticbum.Base.getContext
/**
* TypefaceUtil helps to retrieve typeface from assets folder.
*
* @author Leonardo Taehwan Kim
*/
object TypefaceUtil {
private val cache = SimpleArrayMap<String, Typeface>()
fun get(path: String): Typeface? {
synchronized(cache) {
if (cache.containsKey(path)) return cache[path]
try {
val typeface =
Typeface.createFromAsset(getContext().assets, path)
cache.put(path, typeface)
return typeface
} catch (e: RuntimeException) {
return null
}
}
}
fun setTypeface(path: String, vararg textViews: TextView?) {
if (textViews == null) return
for (textView in textViews) if (textView != null) textView.typeface =
get(path)
}
fun setTypeface(path: String, includeFontPadding: Boolean, vararg textViews: TextView?) {
if (textViews == null) return
for (textView in textViews) {
if (textView != null) {
textView.typeface = get(path)
textView.includeFontPadding = includeFontPadding
}
}
}
}

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.log;
package kr.lunaticbum.utils.log;
/**
* AndroidLogPrinter log message via Android system.

View File

@ -1,4 +1,4 @@
package com.thefinestartist.utils.log;
package kr.lunaticbum.utils.log;
/**
* FileLogPrinter log message via file system.

View File

@ -0,0 +1,9 @@
//package kr.lunaticbum.utils.log;
//
///**
// * L is abbreviation class of {@link LogUtil}.
// *
// * @author Leonardo Taehwan Kim
// */
//public class L extends LogUtil {
//}

View File

@ -0,0 +1,8 @@
package kr.lunaticbum.utils.log
/**
* L is abbreviation class of [LogUtil].
*
* @author Leonardo Taehwan Kim
*/
//class L : LogUtil()

Some files were not shown because too many files have changed in this diff Show More