SubwayTooter-Android-App/app/src/main/java/jp/juggler/util/Utils.kt

222 lines
6.8 KiB
Kotlin

package jp.juggler.util
import android.content.Context
import androidx.core.content.ContextCompat
// 型推論できる文脈だと型名を書かずにすむ
@Suppress("unused")
inline fun <reified T : Any> Any?.cast(): T? = this as? T
@Suppress("unused")
inline fun <reified T : Any> Any.castNotNull(): T = this as T
// 型推論できる文脈だと型名を書かずにすむ
inline fun <reified T> systemService(context: Context): T? =
/* ContextCompat. */ ContextCompat.getSystemService(context, T::class.java)
fun<T:Comparable<T>> minComparable(a:T,b:T):T = if (a <= b) a else b
fun<T:Comparable<T>> maxComparable(a:T,b:T):T = if (a >= b) a else b
fun <T:Comparable<T>> T.clip(min:T,max:T) = if(this<min) min else if(this>max) max else this
fun <T:Any> MutableCollection<T>.removeFirst( check:(T)->Boolean ): T?{
val it = iterator()
while(it.hasNext()){
val item = it.next()
if( check(item)){
it.remove()
return item
}
}
return null
}
//
//object Utils {
//
// val log = LogCategory("Utils")
//
// /////////////////////////////////////////////
//
// private val taisaku_map : HashMap<Char, String>
// private val taisaku_map2 : SparseBooleanArray
//
// // public static int getEnumStringId( String residPrefix, String name,Context context ) {
// // name = residPrefix + name;
// // try{
// // int iv = context.getResources().getIdentifier(name,"string",context.getPackageName() );
// // if( iv != 0 ) return iv;
// // }catch(Throwable ex){
// // }
// // warning.e("missing resid for %s",name);
// // return R.string.Dialog_Cancel;
// // }
//
// // public static String getConnectionResultErrorMessage( ConnectionResult connectionResult ){
// // int code = connectionResult.getErrorCode();
// // String msg = connectionResult.getErrorMessage();
// // if( msg == null || msg.isEmpty( ) ){
// // switch( code ){
// // case ConnectionResult.SUCCESS:
// // msg = "SUCCESS";
// // break;
// // case ConnectionResult.SERVICE_MISSING:
// // msg = "SERVICE_MISSING";
// // break;
// // case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:
// // msg = "SERVICE_VERSION_UPDATE_REQUIRED";
// // break;
// // case ConnectionResult.SERVICE_DISABLED:
// // msg = "SERVICE_DISABLED";
// // break;
// // case ConnectionResult.SIGN_IN_REQUIRED:
// // msg = "SIGN_IN_REQUIRED";
// // break;
// // case ConnectionResult.INVALID_ACCOUNT:
// // msg = "INVALID_ACCOUNT";
// // break;
// // case ConnectionResult.RESOLUTION_REQUIRED:
// // msg = "RESOLUTION_REQUIRED";
// // break;
// // case ConnectionResult.NETWORK_ERROR:
// // msg = "NETWORK_ERROR";
// // break;
// // case ConnectionResult.INTERNAL_ERROR:
// // msg = "INTERNAL_ERROR";
// // break;
// // case ConnectionResult.SERVICE_INVALID:
// // msg = "SERVICE_INVALID";
// // break;
// // case ConnectionResult.DEVELOPER_ERROR:
// // msg = "DEVELOPER_ERROR";
// // break;
// // case ConnectionResult.LICENSE_CHECK_FAILED:
// // msg = "LICENSE_CHECK_FAILED";
// // break;
// // case ConnectionResult.CANCELED:
// // msg = "CANCELED";
// // break;
// // case ConnectionResult.TIMEOUT:
// // msg = "TIMEOUT";
// // break;
// // case ConnectionResult.INTERRUPTED:
// // msg = "INTERRUPTED";
// // break;
// // case ConnectionResult.API_UNAVAILABLE:
// // msg = "API_UNAVAILABLE";
// // break;
// // case ConnectionResult.SIGN_IN_FAILED:
// // msg = "SIGN_IN_FAILED";
// // break;
// // case ConnectionResult.SERVICE_UPDATING:
// // msg = "SERVICE_UPDATING";
// // break;
// // case ConnectionResult.SERVICE_MISSING_PERMISSION:
// // msg = "SERVICE_MISSING_PERMISSION";
// // break;
// // case ConnectionResult.RESTRICTED_PROFILE:
// // msg = "RESTRICTED_PROFILE";
// // break;
// //
// // }
// // }
// // return msg;
// // }
//
// // public static String getConnectionSuspendedMessage( int i ){
// // switch( i ){
// // default:
// // return "?";
// // case GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST:
// // return "NETWORK_LOST";
// // case GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED:
// // return "SERVICE_DISCONNECTED";
// // }
// // }
//
// // fun url2name(url : String?) : String? {
// // return if(url == null) null else encodeBase64Url(encodeSHA256(encodeUTF8(url)))
// // }
//
// // public static String name2url(String entry) {
// // if(entry==null) return null;
// // byte[] b = new byte[entry.length()/2];
// // for(int i=0,ie=b.length;i<ie;++i){
// // b[i]= (byte)((hex2int(entry.charAt(i*2))<<4)| hex2int(entry.charAt(i*2+1)));
// // }
// // return decodeUTF8(b);
// // }
//
// ///////////////////////////////////////////////////
//
// private fun _taisaku_add_string(z : String, h : String) {
// var i = 0
// val e = z.length
// while(i < e) {
// val zc = z[i]
// taisaku_map[zc] = h[i].toString()
// taisaku_map2.put(zc.toInt(), true)
// ++ i
// }
// }
//
// init {
// taisaku_map = HashMap()
// taisaku_map2 = SparseBooleanArray()
//
// // tilde,wave dash,horizontal ellipsis,minus sign
// _taisaku_add_string(
// "\u2073\u301C\u22EF\uFF0D", "\u007e\uFF5E\u2026\u2212"
// )
// // zenkaku to hankaku
// _taisaku_add_string(
// " !”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}",
// " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}"
// )
//
// }
//
// private fun isBadChar2(c : Char) : Boolean {
// return c.toInt() == 0xa || taisaku_map2.get(c.toInt())
// }
//
// //! フォントによって全角文字が化けるので、その対策
// @Suppress("unused")
// fun font_taisaku(text : String?, lf2br : Boolean) : String? {
// if(text == null) return null
// val l = text.length
// val sb = StringBuilder(l)
// if(! lf2br) {
// var i = 0
// while(i < l) {
// val start = i
// while(i < l && ! taisaku_map2.get(text[i].toInt())) ++ i
// if(i > start) {
// sb.append(text.substring(start, i))
// if(i >= l) break
// }
// sb.append(taisaku_map[text[i]])
// ++ i
// }
// } else {
// var i = 0
// while(i < l) {
// val start = i
// while(i < l && ! isBadChar2(text[i])) ++ i
// if(i > start) {
// sb.append(text.substring(start, i))
// if(i >= l) break
// }
// val c = text[i]
// if(c.toInt() == 0xa) {
// sb.append("<br/>")
// } else {
// sb.append(taisaku_map[c])
// }
// ++ i
// }
// }
// return sb.toString()
// }
//}
//